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 dan, 16 sati
  • gesundheit: Ima li tko crni titan band L za AWU2?
  • Yonkis: Također, ako pitaš bilo koji AI npr Grok, Perplexity, Copilot, ChatGPT i postaviš baš to pitanje (plus detalji) možda već dobiješ neki dobar lead za daljnje rješavanje.
  • Yonkis: Otvori novu temu u Forumu te navedi koji je OS i koji MBook kao i koja verzija softwarea jer tu na Vikalici ne možemo u detalje tj dopisivati se naširoko.
  • Novak: Netko tko mi može pomoći sa Mac-om! VideoProc Vlogger radi na HPu (Windows) ,ali taj isti program NE RADI na Macbooku!
  • Gjuroo: Mbappe je od modrića dobio jedan atomski slijeva.
  • Sarek: Možda je igrao i Football manager. Imam ja dva bliska prijatelja koja su rekli da to stvarno pomaže. Glavni su u kladionici
  • drlovric: @Ender: Normalno. Skidaj gace, nuklearke su u silosima :)
  • m@xym: ... ma ne, nego je to je zato što je Dalić primjenio Starcraft strategiju...
  • Ender: hoces reci da je trebalo da spusti gace i da se predaju, jer je to nuklearna sila? :)
  • drlovric: Izgubi nuklearna sila FRA na Poljudu :)
  • Yonkis: Novak: zanemari prijašnji link, ovo je ono što tražiš: [link]
  • Yonkis: Novak, evo probaj ovako: [link]
  • ^SuperUnknown^: Ako netko treba origigi silikonske maskice za iPhone XS Max, 12 Pro Max, Samsung Galaxy S9 nek javi u PM :)
  • Novak: Da li je moguće prebaciti Tor browser bookmark sa windows PCa na Macbook?! Hvala.
  • Yonkis: Hvala Kile, vidi ovdje [link]
  • Kile: Za sve koje koriste Apple Watch od sada HT nudi multi sim tako da sat radi bez iPhona ako ima cellular opciju.
  • Yonkis: 18.3.2 verzije su dostupne kao i 15.3.2 za Sekvoju
  • kupus: eh moj dream, mislim da si fulao forum
  • dpasaric: Evo stiže tuce za tebe, cijena sitnica! :)
  • smayoo: Davore, pa to je prava prilika. Naruči mi odmah 10 komada. :P
  • smayoo: mislim da ne
  • dreaMMAster: Jel ima na forumu generalna tema o novom M4 Airu?
  • dpasaric: :)
  • dpasaric: Mac Studio u top konfiguraciji nešto preko 15.000 € PDV
  • dpasaric: Stigle CTO cijene za MacBook Air 15" M4 u Voćarnu... ostalo će ovih dana!
  • Yonkis: Kako instalirati Apple Sports app ako imam na svom hrv acc eura?
  • Yonkis: Raid? Za komarce? Za Siri?
  • drlovric: @Yonkis: Sad marketing timovi vec rade na strategiji "Kupite novi iPhone raid Nove Siri" :) Kao sto su se ljudi upecali na Apple inteligenciju, koja niti dan-danas ne radi niti jednu jedinu korisnu i uporabljivu stvar.
  • Yonkis: Look how they massacred my boy [link]
  • kupus: sad se ne može upaliti, nema ni jabuke pri paljenju. rip imac
  • kupus: nisam ni ja gasio svoj imac. neki dan, nakon budjenja iz sna, radio je 5 minuta. poslije toga screen "flickering" pa se ugasio.
  • Ender: @hal9000: mislim da nema smisla ni potrebe za takvom anketom. jer Mac se ne restartuje, osim kad budu neki update-i sistema, al to je redovno odrzavanje :)
  • Ender: @ZoPaj: toliko cesto? :) podseti me na mog kolegu sa studija kad je rekao - ja menjam devojke kao carape, 2 puta u godinu dana :)
  • Yonkis: @zopaj ima travel-sickness, ne podnosi vožnju? :)
  • ZoPaj: ja restartam često, dva tri put godišnje.. a kad ga vozim na more ugasim ga skroz ;)
  • hal9000: @Ender - Mogli bi predložiti jabučnjaku da stave anketu tipa "Kad ste zadnji put restartali svoj mac" :D
  • hal9000: @borisone Ne fali kontekst. Sjećam se kada sam ga zadnji put restartao, samo je bilo davno pa ne mogu procjeniti. A nemam preko 6 banki. Nisam boomer. :P
  • Borisone: Fali kontekst. Ako hal9000 ima preko šest banki taj "tako davno" moče biti i jučer. :-)
  • Ender: @hal9000: tako sam nesto i pretpostavio :)
  • hal9000: @Ender Nemam pojma! Toliko davno je to bilo da se ne mogu ni sjetiti! :D
  • Borisone: Novi Mac Studio, MacBook Air, iPad Air i iPad.
  • Borisone: Toliko najava ovaj tjedan a vikalica šuti.
  • Lihto: Its Been 84 Years XD
  • Ender: @hal9000: posle koliko vremena je bio taj restart?
  • hal9000: Danas sam restartao Mac! :O
  • kupus: @yonkis :D
  • ping: Pa HR koristi samo Skype. Ne bi to znao da to svaki put ne naglase. Ptrm skype iz Rima, putem skype iz Bruxellesa…
  • Yonkis: Ako ništa ostao je kao sinonim za online video call :) barem za sada, za neke.
  • Zdravac: ...Skype je izgubio smisao, kao i bilokakav interes za borbu sa konkurentima
  • Zdravac: vjerojatno ne, ali eto, malo nostalgije, iako je to već dugo vremena bilo izgledno, od kada su puno toga iskoristili za Teams...

Za vikanje moraš biti prijavljen.

Prijava

Prisutni jabučari

Ender, MacSlavko, tino1, VanjusOS, zvone, Anonimci (550)

Novo na Jabučnjaku

Teme

Poruke

Oglasi

Komentari

Anketa

Koji Mac koristite?

Page Speed 0.95 Seconds

Provided by iJoomla SEO