Ruby i čitanje fileova - pomoć
(1 korsinik/a gleda/ju temu) (1) Gost

Ruby i čitanje fileova - pomoć


19.01.2017 | 22:04
Dobra večer,

Trebam napisati skritpu u Rubyju (ili Pythonu ako Python moze pozvati skriptu napisanu u Rubyju), a kako ga nikada nisam koristila Ruby (sada ga instaliram) trebla bih Vašu pomoć. Svrha ovoga je automatizacija jednog procesa.

Zadatak (za početak) je sljedeći: imam .txt file ("input.txt") koji u prvom retku ima nazive stupca (countryName, ASIN, IOG te QTY) te nakon toga podatke koji su razdvojeni razmakom. Primjer filea:

countryName	ASIN	IOG QTY
IT	B000X2DMEG	75   300
IT	B001VMEUR0	7     3020
IT	B0028Y38XC	        75    234
IT	B004ZY6VPA	        75    212
IT	B005S42HYA	 540173  1234


Imam tri cilja (prvotno ću se skoncetrirati na prva dva) te ću napisati moje ideje kako to rješiti, ali ne znam baš funkcije/sintaksu pa bih voljela vašu pomoć.

1. Iz svakog retka izvući prva tri podatka, tj. countryName, ASIN i IOG te pozvati drugu Ruby skriptu "cityCheck.rb" koja prima ta tri argumenta.

1.1. Je li moguće pozvati tu skritpu iz Pythona ili moja skripta isto mora biti u Rubyju?

Kada se pozove ta druga skripta, ona otvori "output.txt" file u kojoj ispise ta tri argumenta plus neke stringove s 4 znaka (dobivene iz treće skripte koja nam nije važna). Primjer outputa "cityCheck.rb":

IT	B000X2DMEG 75 300 ZAGR RIJE SPLI PULA LOND PARI MILA 


2. Trebam se prošetati po tom outputu te naći npr. string "MILA". Ako on postoji, "MILA" se mora nadodati u prvi file "input.txt" izmedju države i ASINa, tj. da se dobije sljedeće:
countryName GRAD	ASIN	IOG QTY
IT MILA	B000X2DMEG	75 300


Ako string "MILA" nije pronađen, onda se taj redak u "input.txt" može izbaciti.

2.1. Je li moguće ubaciti ime grada u prvotni file na točno oređeno mjesto (izbjegla bih ubacivanje na zadnje mjesto) ili je lakše napraviti treću datoteku iz koje upisujem tražene podatke kako se krećem po "input.txt" te da ništa ne brišem po inputu?

3. Kada imam gotovu listu, moram razbiti listu ovisno o QTY, tj. ako je max(QTY) po retku 150 onda ću morati napraviti slijedeće:

IT MILA	B000X2DMEG	75 150
IT MILA	B000X2DMEG	75 150

_ _ _ _ _ _
Dakle moja ideja je u nekom pseudokodu slijedeća:
otvoriti input.txt
          preskočiti prvi redak
          po retcima do:
          sve stringove u tome retku staviti u listu t.d. ih mogu pozvati s arr[i]
          pozvati drugu skriptu i prošetati se fileu te naći predefinirani string


Tu dolazim na problem - ne znam kako da nastavim - tj. kako da kažem mojoj skripti da je string nađen ili ne te ako je gdje da modificiram taj redak.

Sintaksu pojma nemam, sada idem googleati no svaka pomoć je dobrodošla isto kao i savjet.

PS Jako, jako rijetko radim s fileovima i zato me ovo čitanje podataka iz filea, regex (pretpostavljam da se tu koristi za određivanje pozicije stringa u retku) dosta zeza.
19.01.2017 | 22:47
Mac OS od 10.9 nadalje ima već uključen Ruby 2.0. Koristiš ga iz Terminala, isto kao i python.

Za pokrenuti ruby skriptu iz pythona, prenosim sa https://www.decalage.info/python/ruby_bridge
Solution 1: run a Ruby script via os.system() or subprocess.Popen()
This is the simplest solution: just run the Ruby script as an external process, using either os.system() or subprocess.Popen(). The major drawback is that it launches a new Ruby interpreter at each call, so performance is very poor if you need to call it several times.


Što se tiče manipulacije datotekama, najjednostavnije ti je čitati txt datoteku redak po redak i onda parsiraj retke kao stringove.
Mijenjati retke u postojećoj datoteci nije nemoguće, ali je znatno kompliciranije od toga da kreiraš novu datoteku te u nju prepisuješ staru, redak po redak, radeći izmjene koje želiš.
19.01.2017 | 23:06
Hvala, taj dio sam napravila.

Kako imati istovremeno otvoreno dvije datoteke te iz njih prepisati u trecu, tj. da se zamapti da se nesto naslo u drugoj te onda prepisati redak iz prve i nadeni string iz druge?

Nadalje, ovo spremi redak u array. Kako da spremim od svakog retka prva dva stringa?

f = File.open("input.txt", "r")
line_array = []
f.each_line { |line| line_array << line }
# puts contents_array
f.close
puts line_array[0]
puts line_array[1]


output:

Lucija Ruby $ ruby vjezba.rb
countryName     ASIN    IOG
IT      B000X2DMEG      75
20.01.2017 | 09:55
Ne znam ruby i nemam se vremena upuštati u to. Generalno, možeš otvoriti koliko želiš fileova istovremeno. Na primjeru tvog sourcea, uz pretpostavku da je točan, to bi bilo ovako nekako:

f1 = FIle.open("input.txt", "r")
f2 = File.open("output.txt", "w")


i dalje se sa f1 referiraš na ulazni file, a s f2 na izlazni

Za izdvojiti prva dva stringa u retku, moraš napraviti parsing rutinu svakog retka i pojedine stringove razdvojiti u neki prometni array ili pointer listu, ili tako nešto.
20.01.2017 | 10:33
Za sada sam napravila ovo, danas cu pogledati kako da usporedim ta dva filea redak po redak.

class Enumerator
  def enum_drop(n)
    with_index do |val, idx|
      next if n == idx
      yield val
    end
  end
end

# go trhough each line
f = File.open("input.txt", "r")
f.each_line.enum_drop(0) do |line|
   country, code = line.chomp.split(/\s+/)
   
   puts "Country: #{country} : #{code}"
 end
20.01.2017 | 11:28
Sam kôd mi nije baš intuitivan (tj. sintaksa mi nije intuitivna) pa bez reference manuala ne kužim uopće što je pjesnik htio reći.
26.01.2017 | 02:20
smayoo kaže:
Sam kôd mi nije baš intuitivan (tj. sintaksa mi nije intuitivna) pa bez reference manuala ne kužim uopće što je pjesnik htio reći.

Hehe, to je ruby.
Poznat (i popularan) po takvoj sintaksi.
26.01.2017 | 11:56

Ne kužim kako po tome može biti POPULARAN?
Moderatori: Bertone
  • Stranica:
  • 1

Vikalica™

Zadnja poruka: pred 9 sati, 24 minuta
  • Kloba: Na Bačvicama, sorry
  • Kloba: Sjećam se. Spavali su u onom hotelu na Žnjanu. I ja sam tamo noćio jednom. Jako dobar hotel. Ko jučer da je bilo. Kako je Laušević rekao "Godine prođe, dan nikako". :)
  • drlovric: Prvi i zadnji put sam HR reprezentaciju gledao na Poljudu protiv Brazila. Davno je to bilo.
  • Kloba: I zaključno da se i ja priljučim - samo da se nešto novo i zanimljivo događa! :D
  • Kloba: Ma što se atmosfere tiče, nema do Poljuda. Još samo da nisu u svađi s HNS-om, svaka reprezentacija tamo se smrzne kada dođe. Samo šta ćeš kada kafići u koju zalaze Torcidaši otvoreno stavljaju znakove "ne poslužujemo osobe koje su došle gledati reprezentaciju". U tom stilu. Ne vole HNS nikako.
  • Kloba: Evo link [link]
  • Kloba: drlovric, pa spomenuo sam to ako ti je promaklo. Točnije, zacrtali su si da za 112. rođendan Hajduka (11. 02. 2023.) dosegnu probjku od 112 tisuća članova. A kako su ranije stigli sa 60 preko sto, nije bilo nerealno to očekivati. A po podacima za 2022., ako ne griješim, Real je imao 120 tisuća članova
  • drlovric: Ma nema veze, samo nek se nesto desava :D
  • cariblanco: Badava će trčati bili i plavi, kad će bijeli biti prvi ;)
  • drlovric: Poljud bi bio pun da je i duplo veci. Ne postoji na daleko losiji klub sa lojalnijim navijacima :)
  • drlovric: @Kloba: Hajduk ima 100 K clanova. Neki dan su pustili ulaznice u prodaju. Otvorio sam na 3 racunala, 7 browsera, logirao se u svaki (kao clan) da uspijem ugrabiit ulaznicu. I nisam uspio. Srecom je brat raido istu stvar u Njemackoj, pa nam je kupio on. Za 2h rasprodat stadion, serrver padao......lista cekanja po sat i po da udjes u sucelje da bi kupio kartu. I to sve ako si clan. Ostali nisu mogli
  • Kloba: Aha, hvala ti na informaciji!
  • Borisone: Ako imaš i LAN i WIFi aktivan na Mac-u, prioritet ti je po defaultu da promet ide prvo po LAN-u.
  • Borisone: To ti je propusnost WiFi-a usko grlo.
  • Kloba: Što se brzine neta tiče, kada laptop spojim LAN-om na ruter, iako mi je u postavkama i dalje Wi-Fi mreža kao opcija spajanja - brzina je 950 Mbps. Kada iskopčam LAN kabel, doslovno deset sekundi nakon ovog rezultata - brzina padne na 200 do 300 Mbps-a. Nije nam jasno! :D
  • Kloba: A Hajduk je ipak najtrofejniji i najstariji hrvatski klub. Bio bi red da se i oni vrate na staze stare slave. Zanimljivost mi je da imaju registriranih navijača više od 110 tisuća, u rangu Real Madrida. Respect, u svakom slučaju. :)
  • Kloba: Štose nogometa tiče, nisam pratio HNL osim u tekstovima pa ne znam tko je više zaslužio ove godine. Rijeka ili Hajduk. Ako je Rijeka dala više, neka bude Rijeka. Zarad one krađe kada ih je Gračan trenirao, ako se dobro sjećam.
  • Kloba: Star možda godinu dana, refurbished kupljen od A1.
  • Kloba: Mobitel je iPhone SE 2022.
  • Kloba: Ljudi, imam pitanje u vezi brzine interneta. Kako sada imam gigabit download u teoriji, u praksi mi je to na laptopu oko 940 Mbps. No na mobu, koji je spojen na isti Wi-Fi (5G) ne pokazuje više od 450 Mpbs download. Ima li neki razlog tomu?
  • cariblanco: I ja kao Dinavovac, bi Volvo da Rijeka osvoji naslov, jer je to zaslužila
  • drlovric: Dinamo j ezapoceo kao drzavni projekt, da se podigne nacionalna svijest u novonastaloj drzavi. Kasnije je prepusten kriminalnoj skupini na upravljanje, koja je radi osobnih interesa obesmislila cijelu ligu. Srecom ta vremena su iza nas. Mislim da je ove godine Rijeka najvise zasluzila da bude prvak, jer igraju najbolji nogomet.
  • Kloba: Iskreno, radi dobrobiti hrvatskog klupskog nogometa, htio bih da ili Hajduk ili Rijeka ili Osijek osvoje ovu sezonu. Da se stvori nova velika četvorka u ovoj maloj zemlji.
  • Kloba: Pa valjda ćeš ove godine slaviti. Dugo niste bili ovako blizu. ;)
  • drlovric: Za Hajduk. Zato sam ovako mlad i pogubio zivce :D
  • cariblanco: za koga navijaš...naše ;)
  • drlovric: Za vikend sam u Splitu. Ostajem par dana. Ako neko od Jabucara dolszi gledati najveci nogometni derbi u Hrvata, tu sam za pice, kavu, rucak…
  • smayoo: Nažalost, je... :(
  • Djuro genijalac: [link]
  • Djuro genijalac: Kaj je umrla Slađana Milošević?
  • smayoo: RIP Slađana Milošević :(
  • Yonkis: [link] iPhone prodan na aukciji za 130.000 dolara
  • Yonkis: macOS Sonoma 14.4.1: fixes USB hubs connected to external displays may not be recognized; Apps that include Java may quit unexpectedly
  • Soffoklo: Fora. Creating a Macintosh-inspired Mac Studio iPad dock. [link]
  • abajo: Kloba: [link]
  • Kloba: Ekipa, može li me neko upititi n stranicu da si skinem macOS Catalina kako bih nanovo reinstalirao komjuter? Taj OS mi je najnovji koji ovaj moj Retina iz 2013. može "progutati". Kako se svi razumijete u ove stvari više od mene, bio bih zahvalan!
  • cariblanco: Na kraju sam skužio koliko je sati, po svitanju...ono fakat čudno ?
  • cariblanco: Istina je da Paragvaj mjenja vrijeme koji je blizu, ali ja imam Argentinski sim :D
  • cariblanco: Sad na mobu s našim sim_om je 7.25 a na mobu s Argentinskim sim_om je 8.25 ! S tim da Argentina nema promjenu verbena ?
  • cariblanco: Jurors imam dilemma, koliko je sati ? koliko mi je poznato mi nismo premjenili vrijeme, mjenjamo ga sljedeći vikend
  • Zdravac: MKBHD pratim i ja, ok je lik, realno recenzira, ne sipa hvalospjeve
  • Kloba: Ma bez daljnjeg. Čovjek si je osigurao egzistenciju, pa i vrlo luksuzan stil života već sada. Ima video u kojem pokazuje svoj studio, linkao sam ga tu svojevremeno. Ma preludo. A tek onaj Mr. Beast? Taj živi u studiu. Opsjednut YT-om.
  • drlovric: Zaradio j eon puno vise na otm videu. Pogledaj samo broj pregleda :)
  • Kloba: NIsam ni ja znao. A šta ćeš, cijena napretka. Za šta je dao 40 somova, sliku CD-a i iTunesa... :)
  • Yonkis: Kloba, što nisi odmah rekao kako je završio unboxing i aktiviranje iPhonea :)
  • Kloba: MKBHD kupio originalni, nikada otvoreni first gen iPhone na aukciji u Chicagu za 32 tisuće dolara. Sa dostavom, porezima, i dodacima na sve ispalo ga je 40 tisuća. Video je tu: [link]
  • Yonkis: [link] - Justice Department sues Apple, alleging it illegally monopolized the smartphone market
  • Kloba: I ja brže na net, nađem video naslova 7 Ways To Fix PS5 Error Code CE-117773-6 :) I prvi "way2 mi pomogne, skužim da je do njih
  • Kloba: Uglavnom, kada sam htio skinuti save sa clouda PS Plua za Horizon 2, javi mi grešku Error Code CE-117773-6
  • Kloba: EON Premium sam uzeo, ne vjerujem koje sve kanale imam. Ruske, Ukrajinske, pa klasika CNN, BBC, Sky, ovo ono. Ali i puno iz regije

Za vikanje moraš biti prijavljen.

Prijava

Prisutni jabučari

ammadeus, Kloba, Riba, SubZeroed, Anonimci (1651)

Novo na Jabučnjaku

Teme

Poruke

Anketa

Kupujete li profesionalni Mac?

Čekam novi modularni Mac Pro - 48.5%
Novac nije problem, kupujem iMac Pro - 0.7%
Kupujem Valjak, baš je lijep i tih! - 0%
Kupujem polovni Mac Pro tower - 11.8%
Nadogradit ću postojeći Mac Pro tower - 2.9%
Običan iMac 27" mi je dovoljan za posao - 5.9%
Skromnih sam potreba, Mac mini je zakon! - 7.4%
Radim na terenu, mora biti MacBook Pro - 3.7%
Ne diram ništa, stari Mac služi me odlično - 10.3%
Kupujem PC kantu i prelazim na Windowse! - 8.8%

Ukupno glasova: 136
Anketa je završena dana: 08 Svi 2018 - 12:17
Page Speed 1.04 Seconds

Provided by iJoomla SEO