Portál AbcLinuxu, 25. dubna 2024 03:42


Dotaz: Ruby a scitani minut

28.5.2015 15:33 luksyk
Ruby a scitani minut
Přečteno: 214×
Odpovědět | Admin
Dobry den,

v jednom sloupecku CSV mam provolane minuty zakazniku ve forme:
00:01:23
00:12:03
00:04:55
Nevite prosim, jak toto v Ruby secist, aby vysledek byl take ve formatu HH:MM:SS a jak tento vysledek pripadne zobrazit jako celkovy pocet minut?

Dekuji

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

28.5.2015 22:36 rastos | skóre: 62 | blog: rastos
Rozbalit Rozbalit vše Re: Ruby a scitani minut
Odpovědět | | Sbalit | Link | Blokovat | Admin
Prvý riadok:
a="00:01:23".split(":")
s=a[0].to_i*3600+a[1].to_i*60+a[2].to_i
s je teraz 83 (sekúnd). Zosumovať cez všetky riadky a dostaneš jedno veľké číslo C.
SS=C%60
MM=((C-SS)/60)%60
HH=C/3600
Čítanie zo súboru a cyklus snáď zvládneš (lebo ja teraz nie ;-) )
28.5.2015 22:46 Delaunay | skóre: 17 | blog:
Rozbalit Rozbalit vše Re: Ruby a scitani minut
Odpovědět | | Sbalit | Link | Blokovat | Admin
Rozdělil bych si každý řetězec na části a ty postupně nasčítával. Pak jednoduše hodnoty vteřin a minut překračující hodnotu 60 setřásl.

Ruby neznám, tak následující kód brát opravdu s rezervou:
t1 = "01:34:46"
t2 = "00:48:55"

tlist1 = t1.split(":").map &:to_i
tlist2 = t2.split(":").map &:to_i

tsumlist = []
tlist1.each_with_index do |val, i|
  tsumlist << val + tlist2[i]
end

tsumlist[1] += tsumlist[2] / 60
tsumlist[2] = tsumlist[2] % 60
tsumlist[0] += tsumlist[1] / 60
tsumlist[1] = tsumlist[1] % 60

print tsumlist.join(":"), "\n"
print tsumlist[0] * 60 + tsumlist[1], "\n"
29.5.2015 00:00 TTT
Rozbalit Rozbalit vše Re: Ruby a scitani minut
Odpovědět | | Sbalit | Link | Blokovat | Admin
require 'csv'
seconds = 0
CSV.foreach("times.csv") { |line|
    seconds += line[0].split(":").map(&:to_i).inject(0) { |sum, n| sum * 60 + n } 
}
seconds.tap { |total| 
    puts ((0..1).map { |i|  res = total % 60; total /= 60; res } << total).reverse.join(":")
}
puts seconds
První blok spočítá celkový počet vteřin. Druhý blok vypíše spočtené jako HH:MM:SS.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.