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 1 sat, 22 minuta
  • Matija klc: Hvala Zdravac, pokusam sa njime
  • Zdravac: Ili si mislio na besplatnu "verziju" Microsoft Office paketa? :)
  • Zdravac: Imaš u App storeu besplatni Collabora Office. On je zasnovan na Libre Office-u kojega svi hvale kao free zamjena za Microsoft
  • Matija klc: Ekipa, trebam office paket za Ipad 10. Ima li kakva besplatna mogucnost ili mi preostaje platiti paket? Hvala
  • zvone: plaćali istu nominalnu sumu u eurima za apple priouzvode a sad kad su euro i dolar isti opet digli.
  • zvone: A i primjetih da prije dok je dolar bio slab smo
  • zvone: Dobra ideja o bojkotu američke robe.
  • rusty: Ja je koristim sa svoje Studio ekrane
  • Yonkis: Koristi li netko (Appleovu) polishing cloth [link]
  • jura22: na Opera for iOS ne radi Vikalica. Sto god se upise ne prikazuje.
  • jura22: Abc
  • petros: Ne bih bojkotirao ni Temu niti AliExpress! :)
  • Zdravac: Samo ubaciš Samsung u ponudu, i svi smo mi opet kod tebe trgujemo!
  • Zdravac: Davore, a Temu bi odmah bojkotirao, jel? :)
  • Zdravac: EU, GB i Canada i još ako bi nekako mogli pridobiti Tursku, mislim da bi mogli jako učinkovito pokazati zube. Kad bih tu vidio zajedništvo, ja bih određeno vrijeme bojkotirao.
  • JOHN: ovakve reakcije tog nasnifanog čobana samo potvrđuju moje sumnje da bolesnici vladaju svijetim a još veći imbecili daju glas takvima što je onaj smrad na zapadu i onaj još smrdljiviji na istoku
  • dpasaric: Nismo spremni! :)
  • JOHN: Ako će se bojkotirati kao ovo s dućanima……nebumo daleko stigli.
  • Zdravac: Jeste li spremni, kao Europljanin, bojkotirati američke proizvode dok je Trump predsjednik i ako EU zaključi da na taj način možemo izboriti / vratiti poštovanje europskog ugleda u novom globalnom poretku ?
  • Borisone: Tresla se brda, umro je iPhone SE. R.I.P.
  • Borisone: Da ima "live" event, bilo bi tjedan dana ranije objava na Apple stranicama.
  • Zdravac: e jbg
  • Zdravac: Jel ima live prijenos?
  • Borisone: Ne. Najvjerojatnije samo ažuriran Apple site i objave za medije o novim uređajima.
  • Zdravac: Jel Apple event danas u 19:00h?
  • Yonkis: Hoćemo li sljedeći iParty organizirati putem Invites app-a? ;)
  • Yonkis: Apple will bring its next-generation M5 chip to the MacBook Pro in the fall, followed by the iPad Pro in the first half of 2026, according to Bloomberg’s Mark Gurman. - Wow, M5 na iPadu. M4 je već overkill ali ok. :D
  • miomika: @Zdravac...vjeruj mi, nebi ga prepoznao razliku, ni da te za guzicu ugrize. Nije to google translate.
  • miomika: Naravno Zdravac, pišeš na pamet i provjerio si, jelda?
  • Zdravac: Možda malo "old fashion", ali eto! :)
  • Zdravac: Vjeruj mi, skuži se odmah AI, ali kod ovih mlađih to prolazi jer je to, kao "kul"
  • Zdravac: Poslovna komunikacija zahtijeva poslovno znanje. Dakle, ili znaš što trebaš pisati, ili ne znaš. Ako ne znaš, zaposliti ću onoga tko zna - sigurno ne AI!
  • Zdravac: Ma kakav crni AI za poslovne mailove!! Kod mene ti to sigurno nebi prošlo!
  • drlovric: Mi saljemo stotine mailova na engleskom i da to ista valja, vec bi bilo u nasem workflow :) Ali eto, uzivaj ako te veseli. Ja it tvrdim da je beskorisno, sporo, trapavo, nedovrseno...
  • miomika: pa dok vidim full feature, nemogu sve reč. Upravo gledam na vijestima, završila je konferencija koja nama brani korištenje AI-a na uređajima. Što je zaključak, naravno, 10 mb texta ničega. Kako vidim u OS:_u, izgleda da će potiho ući na mala vrata. @dlovric možda je do ljudi koji je neznaju koristiti. Ipak je u pozadini chatGPT. Meni se ova opcija u mailu jako sviđa, da napravi poslovni
  • Soffoklo: @drlovric ne dozivljava nas Apple kao neko africko pleme vec mi sami sebe tako dozivljavamo i predstavljamo, a onda tvrtke poput Apple sukladno tome djeluju. Zato i Slovenija ima titlove, kao sto je imala i Apple Music davno prije nas i to uz potpunu uslugu, a ne djelomicnu, pa se premijer javno hvali kako eto imamo Apple Music. Do nas je.
  • drlovric: Apple AI je potpuno beskoristan. Dugo nisu vecu blamazu napravili. Svaki dan radim sa Amerima i niti jedan covjek mi nije rekao da ima jedan koristan feature. Svi cekaju bolju Siri koje nema pa nema. A ljudi kupovali iPhone 16 Pro radi "inteligencije" :D
  • miomika: ...i proofreading i onaj AI radi u mailu. Doduše, samo na engleskom, ali radi. Točno se kuži da lagano ovo preregulirano govno iz EU nema proslka i da AI lagano kuca na vrata.
  • miomika: ajde neke dobre vijesti. AKo je laptop/comp settiran na eng. radit će vam image playground s najnovijim update-om 15.3.1
  • drlovric: Apple nas dozivljava kao neko africko pleme i nema tu razumnog objasnjenja ni opravdanja.
  • drlovric: Da jadni, kako bi to mogli priustiti. Bitno bi im utjecalo na poslovanje a pokrili bi desetke miluja ljudi (HR, BIH, SRB, CG). Sve isti jezik :) Iz istog razloga nemamo titlove na Apple TV. A Slovenija ima. Valjda su veci od ostatka ex. YU :)
  • dpasaric: Nema Hrvatske jer bi to značilo da moraju zaposliti osobu koja čita komentare na našem jeziku, a za to smo premaleno tržište. Ostavi komentar na ENG na US/UK zemlji i ciao.
  • dpasaric: MacBook Pro M4 16" prikaz je na naslovnici! :)
  • Yonkis: Zašto nema Hrvatske kada se želi dati feedback na nešto Appleovo? [link]
  • Yonkis: iCloud (plus). Ne prikazuje znak “plus”. Hellou, 21st ovdje :))))
  • Yonkis: Ako imate iCloud onda možete koristiti [link] čak i sa Android korisnicima.
  • m@xym: @Zdravac, naravno da hoće.
  • Zdravac: Hoće li nam to Apple proizvodi drastično poskupiti?
  • jura22: Na danasnji da Steve Jobs je predstavio prvi komercijalni Macintosh.
  • Riba: Ja sam davno narucio sa UK Amazona ali vidim da tamo vise nije available.

Za vikanje moraš biti prijavljen.

Prijava

Prisutni jabučari

Air, BigMac, EJc, Ender, robee, tino1, Anonimci (1011)

Novo na Jabučnjaku

Teme

Poruke

Oglasi

Komentari

Anketa

Koji Mac koristite?

Page Speed 1.02 Seconds

Provided by iJoomla SEO