Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: pouziti File::Stat v ruby  (Přečteno 3234 krát)

ntz_reloaded

  • Lokaj
  • Závislák
  • ***
  • Příspěvků: 3735
  • skill :: ur home erly
pouziti File::Stat v ruby
« kdy: 09 Července 2014, 17:56:35 »
ahoj,

pracuju na prekodeni 1:1 neceho z perlu do ruby .. zasekl jsem se na tom, ze nejsem v ruby schopen vypsat normalni stat() (C-like eg sys/stat.h, perl-like stat(), whatever) ..

v podstate mam problem s timhle jednim vyrazem:

Kód: [Vybrat]
join(";", $file, stat("$file"))
muzete mi nekdo ukazat nejakej rubi one-liner kterej proste udela presne tohle:

Kód: [Vybrat]
# perl -e 'my $file = "/etc/hosts"; print join(";", $file, stat("$file")), "\n"'
/etc/hosts;64770;1051332;33188;1;0;0;0;1004;1404856621;1404461482;1404461482;4096;8

diky, ntz
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??

jmp

  • Host
Re:pouziti File::Stat v ruby
« Odpověď #1 kdy: 09 Července 2014, 18:22:53 »

ntz_reloaded

  • Lokaj
  • Závislák
  • ***
  • Příspěvků: 3735
  • skill :: ur home erly
Re:pouziti File::Stat v ruby
« Odpověď #2 kdy: 09 Července 2014, 19:24:30 »
http://ruby-doc.org/core-1.9.3/File/Stat.html
tohle znam uz nazpamet.

Copak nevidis co to dela s tema hodnotama ? Ja chci jen ten raw a ne tuhle hruzu.
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??

jmp

  • Host
Re:pouziti File::Stat v ruby
« Odpověď #3 kdy: 09 Července 2014, 19:39:16 »
já to z toho špatně pochopil - přišlo mi to jako snaha naprogramovat něco, co je již obsaženo... (ale ani v jednom neprogramuju :-))

ntz_reloaded

  • Lokaj
  • Závislák
  • ***
  • Příspěvků: 3735
  • skill :: ur home erly
Re:pouziti File::Stat v ruby
« Odpověď #4 kdy: 10 Července 2014, 15:51:27 »
tak dik ubuntaci, ze jste mi pomohli ... uz to mam, ono to prekvapive dava pokazdy jiny hodnoty:

Kód: [Vybrat]
# ruby -e 'path= "/etc/hosts"; stat = File.stat(path); puts ([path] + [:dev,:ino,:mode,:nlink,:uid,:gid,:rdev,:size,:atime, :mtime, :ctime, :blksize,:blocks].map {|n| stat.send(n).to_i }).join(";")'
/etc/hosts;64770;1051332;33188;1;0;0;0;1004;1404979555;1404461482;1404461482;4096;8



# ruby -e 'path="/etc/hosts"; puts File.stat(path).inspect'
#<File::Stat dev=0xfd02, ino=1051332, mode=0100644, nlink=1, uid=0, gid=0, rdev=0x0, size=1004, blksize=4096, blocks=8, atime=2014-07-10 10:05:55 +0200, mtime=2014-07-04 10:11:22 +0200, ctime=2014-07-04 10:11:22 +0200>

opravdu nechapu ruby, co to je za dementni jazyk, kdyz stejna funkce uplne randomly dava dva formaty vystupu pro jednu hodnotu
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3176
    • GdH-Notes
Re:pouziti File::Stat v ruby
« Odpověď #5 kdy: 10 Července 2014, 19:09:35 »
Co je na tom náhodnýho? inspect je metoda, která ti prostě vrátí data ve stringu už formátovaná pro uživatele a to včetně interpretace hodnot v pro ně typické číselné soustavě. 0x je prefix šestnáctkové a 0 osmičkové (btw stejně jako v Bashi), takže je jasno.  Pokud si vyžádáš hodnotu konkrétního parametru, vrátí ti ho daná metoda jako fixnum, string, nebo třeba aTime. fixnum je objekt, který obsahuje integer a jestli ho interpretuješ v desítkové, nebo šestnáctkové soustavě, je fuk, interně se s ním nakládá furt stejně. Výchozí pro převod integeru do stringu ale bývá soustava desítková, takže když budu chtít třeba parametr dev vypsat v jiné soustavě, musím si o to říct přidáním parametru:

Kód: [Vybrat]
puts(File.stat("/etc/hosts").dev.to_s(16))
mtime a další časové parametry jsou zase v objektu aTime, jehož výchozí převod do stringu dává human readable zápis času a  aby vyplivl integer, zase je třeba zavolat metodu, která to udělá.

Nikdy jsem v Ruby nic nedělal, jen jsem teď nahlíd do dokumentace.

Edit: upřesnění, doplnění, kurnik, já se fakt neumim vyjadřovat
« Poslední změna: 10 Července 2014, 21:02:28 od GdH »

ntz_reloaded

  • Lokaj
  • Závislák
  • ***
  • Příspěvků: 3735
  • skill :: ur home erly
Re:pouziti File::Stat v ruby
« Odpověď #6 kdy: 11 Července 2014, 10:28:48 »
@gdh .. hmm, aha .. no tak to se omlouvam .. ze .inspect dela neco s tema parametrama jsem si nevsiml
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3176
    • GdH-Notes
Re:pouziti File::Stat v ruby
« Odpověď #7 kdy: 11 Července 2014, 12:50:30 »
Tady je třeba si uvědomit, že všechno, včetně jednoduchých datových typů, jako integer, jsou nějaké objekty, které mají nějaké metody (funkce). Co z nich leze, jaké datové typy, to je v dokumentaci. Ty v tom tvém onelineru děláš pár zbytečných operací navíc. Když už tam stejně máš výčet těch metod v seznamu, tak je rozumnější ho naplnit rovnou užitečnými hodnotami, bez další smyčky a zbytečných konverzí, třeba takto:

Kód: [Vybrat]
path="/etc/hosts"; s=File.stat(path); puts([path, s.dev, s.ino,s.mode, s.nlink, s.uid, s.gid, s.rdev, s.size, s.atime.to_i, s.mtime.to_i, s.ctime.to_i, s.blksize,s.blocks].join(";"))
Všechny hodnoty v seznamu budou int a při vstupu do join se automaticky zkonvertují do stringu.

Edit: Umazání zbytečných závorek - to_i() > to_i, Ruby je při volání metody nepotřebuje, když v nich není žádný argument.
« Poslední změna: 11 Července 2014, 14:19:07 od GdH »

ntz_reloaded

  • Lokaj
  • Závislák
  • ***
  • Příspěvků: 3735
  • skill :: ur home erly
Re:pouziti File::Stat v ruby
« Odpověď #8 kdy: 11 Července 2014, 13:23:48 »
aha o.O
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??

Martin Šácha

  • Člen občanského sdružení Ubuntu ČR a placené komunitní podpory
  • Administrátor fóra
  • ******
  • Příspěvků: 5153
Re:pouziti File::Stat v ruby
« Odpověď #9 kdy: 11 Července 2014, 14:54:24 »
Edit: Umazání zbytečných závorek - to_i() > to_i, Ruby je při volání metody nepotřebuje, když v nich není žádný argument.

Ale fuj...
Mint MATE 64bit / DuckDuckGo.com
Programátoři považují WYSIWYG za špatné u kódu i u žen. Programátor chce "dostat to, co žádá“ – kód tajemný, neodpouštějící, nebezpečný.

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3176
    • GdH-Notes
Re:pouziti File::Stat v ruby
« Odpověď #10 kdy: 11 Července 2014, 15:18:18 »
Edit: Umazání zbytečných závorek - to_i() > to_i, Ruby je při volání metody nepotřebuje, když v nich není žádný argument.

Ale fuj...

Ze začátku mě to taky zmátlo, ale dokumentace hovoří jasně. A to ještě nejsou největší zvěrstva, ono je možné ty závorky vynechat i když argumenty jsou, pokud rovnou nepotřebuješ volat metodu výsledku :)

 

Provoz zaštiťuje spolek OpenAlt.