Zadatak upis i ispis iz fajla

Postovani,
Da li neko ima ideju kako moze da se resi ovaj zadatak na koji sam naisao?
Potrebno je ucitati falj primer.txt u program.
Fajl je takav da svaka linija predstavlja jedan izraz u formatu:
5-2
9-4
format je :
Treba napisati program koji cita fajl,liniju po liniju,primenjuje datu operaciju, i rezultat zajedno sa pripadajucim izrazom upisuje u faj ispis.txt
izgled fajla ispis.txt
5-2=3
9-4=5

Da li mozete da posaljete link zadatka?

Zdravo,

Da li znamo nešto više o sadržaju fajla ispis.txt? Na primer, da li je uvek oduzimanje, da li izraz uvek ima format x nekaoperacija y = z ili može sadržati i više operacija ili više članova, da li su brojevi uvek integeri ili ima i float, da li se pojavljuju zagrade…

Postovanje Lazare,
samo da je format i da treba voditi racuna karakteru novi red.
Znaci ispis je u dva reda , posle koda za otvaranje fajla verovatno idu print(operacija oduzimanja rezultat i to je u dva reda cim se spominje newline caracter .
verovatno su integeri i samo ti brojevi jer nemaju nikakve druge karakteristike zagrade ili navodnike.
to bi trebala da bude provera otvaranja fajla iz jednog upis i cuvanje u drugi fajl
nesto ovog tipa
with open (r’C:\Users\User\Desktop\primer.txt’, ‘r’) as f:
print(f.read())
with open(r’C:\Users\User\Desktop\izlaz.txt’, ‘w’) as k:
k.write(print(‘result’ 5-2 \n 9-4)
with open(r’C:\Users\User\Desktop\ispis.txt’, ‘r’) as k:
k.read()
Verovatno ima gresaka u sintaksi pa ocu da se posavetujem sa nekim
Pozdrav,
Pedja

nece da mi izadje kako format treba da izgleda ajd da probam ovako:
broj-operator-broj
nece sa vece i manje da mi se napise na sajtu

Postovanje,
Nisam sacuvao prekopirao sam ga u word, mozda sam nesto tu izgresio.

U redu,

Evo šaljem ovde jedno rešenje koje sam iskomentarisao i koje se odnosi samo na oduzimanje i samo na dobro formatirane fajlove, ako ima i drugih operacija u fajlu, neće raditi, ali možete se igrati i modifikovati ga dalje. Možete da ga dobudžite da radi za ostale operacije, da ume da se snađe sa slučajevima da se pojavljuju prazni redovi, redovi koji nisu dobro formatirani i sl.

izlaz = open("E:/Desktop/izlaz.txt", "w") #otvaramo izlazni fajl tako da u njega može da se piše i smetamo ga u varijablu izlaz 

with open("E:/Desktop/primer.txt") as fajl: #otvaramo ulazni fajl
    redovi = fajl.readlines() #varijabla u koju smeštamo svaki red ulaznog fajla koji čitamo pomoću metoda .readlines() Ako želite da vidite kako izgleda, stavite ovde ispod print(redovi) prilikom pokretanja programa. Tehnički se dobije lista stringova u kojoj je element liste string u koji je smešten ceo red iz originalnog fajla
    string='' # prazan string koji ćemo da popunjavamo traženim vredostima
    for i in redovi: #petlja u kojoj ćemo u svakom prolazu modifikovati jedan red iz ulaznog fajla i upisati novodobijeni red u izlazni fajl 
        i=i.rstrip("\n\r") #iz svakog reda sklanjamo karaktere za novi red i carrige return  (oni će uvek postjati u tekstualnom fajlu kada se prelazi u novi red) pomoću metoda .strip()
        x =int(i[0]) #pretvaramo prvi karakter stringa u broj 
        y = int(i[2])#pretvaramo treći karakter stringa u broj
        z = x-y #nalazimo razliku
        string = str(x)+'-'+str(y)+'='+str(z)+'\r' #vraćamo sve u str format i ažuriramo varijablu string - pravimo string koji treba da predstavlja jedan red novog fajla
        izlaz.write(string) #pišemo novi string u fajl izlaz
    izlaz.close() #zatvaramo fajl izlaz.

Postovani Lazare,
Evo ja sam malo ucio kroz Vas primer i preradio sam ga da se drukcije zatvara:
To za Vas sigurno nije nesto ali meni je znacilo.
Sad cu da probam one druge mogucnosti izmena i nadogradnje.
Pozdrav
Pedja

izlaz = open(“C:/Users/User\Desktop/izlaz.txt”, “w”) #otvaramo izlazni fajl tako da u njega može da se piše i smetamo ga u varijablu izlaz
try:
primer = open(“C:/Users/User\Desktop/primer.txt”) #otvaramo ulazni fajl
redovi = primer.readlines() #varijabla u koju smeštamo svaki red ulaznog fajla koji čitamo pomoću metoda .readlines() Ako želite da vidite kako izgleda, stavite ovde ispod print(redovi) prilikom pokretanja programa. Tehnički se dobije lista stringova u kojoj je element liste string u koji je smešten ceo red iz originalnog fajla
string=’’ # i ovo moze da se izbaci ali mislim da je onda samo za podatke koji su u ulaznom fajlu
for i in redovi: #petlja u kojoj ćemo u svakom prolazu modifikovati jedan red iz ulaznog fajla i upisati novodobijeni red u izlazni fajl
i=i.rstrip("\n\r") #iz svakog reda sklanjamo karaktere za novi red i carrige return (oni će uvek postjati u tekstualnom fajlu kada se prelazi u novi red) pomoću metoda .strip()
x =int(i[0]) #pretvaramo prvi karakter stringa u broj
y = int(i[2])#pretvaramo treći karakter stringa u broj
z = x-y #nalazimo razliku
string = str(x)+’-’+str(y)+’=’+str(z)+’\r’ #vraćamo sve u str format i ažuriramo varijablu string - pravimo string koji treba da predstavlja jedan red novog fajla
izlaz.write(string) #pišemo novi string u fajl izlaz
finally:
izlaz.close() #zatvaramo fajl izlaz.

Nije se bas dobro prekopirao, uvlacenja nisu dobra

Dragi Peđa,

Ja apsolutno razumem početničke probleme i značaj svakog novog detalja i tehnike pošto sam i sam počeo da učim prilično kasno i za sebe bih rekao da sam daleko od nekog ozbiljnog programerskog znanja. Nemojte da se obeshrabrite i slobno pitajte za pomoć kad god vam je potrebna. Vidim da jako lepo napredujete i ne sumnjam da ćete brzo savladati sve potrebne stvari.

Sećam se da kad sam učio da otvaram i pišem fajlove, najviše me je mučilo što sam zaboravljao da zatvaram fajlove i onda se stvari nisu lepo upisivale u njih. Pored toga, sećam se da mi je u početku bilo neudobno da se snađem sa putanjama u programima - da li da koristim apsolutnu ili relativnu putanju, da li da pišem / ili \ ili \\ i kada treba da upotrebljavam koje od toga. Sve su to neke stvari koje kroz rutinu postanu dosta lakše. Samo nemojte da se obeshrabrite na početku ako je nešto ne ide baš odmah glatko.

P. S.
U našem editoru možete koristiti opciju performated text - izgleda ovako </> i kada kliknete na to možete da unesete programski kod koji je uvučen kako treba.

Postovani Lazare,
Hvala veliko na podrsci koja mi znaci.
Mislim da niste kasno krenuli i imate dovoljno vremena da se usavrsite.
Ja imam 51 godinu i posle 25 godina staza ,a od toga 22 na istom poslu, sam krajem 2019 ostao bez posla, koji nije imao nikakve veze sa kompjuterima.
Mislio sam da cu sa tog posla da odem u penziju.
Sada evo pokusavam dok je ova pandemija da iskoristim vreme kvalitetno kako bih stekao neko predznaje iz IT oblasti da bih posle pandemije upisao neku dvogodisnju skolu za python i prekvalifikovao se. Mislim da je za dobro savladavanje ovog jezika potrebno jedno dve godine vodjenog ucenja.
U sledecih desetak godina python ce sigurno po onome kako sam ja shvatio razne clanke na internetu biti jedan od dominantnih programskih jezika.
Moram da naucim, algoritme, matrice i ko zna sta jos sto nisam ni ucio u srednjoj skoli iz logike i matematike.
Ovo Vam sve govorim iz razloga da vidite da nije kasno i da je samo bitno naci svoje mesto sto ste Vi i uradili na ovom sajtu.
Srdacan pozdrav,
Predrag

2 Likes

@Pedja69 не знам да ли сте можда видели код нас на сајту (пошто превише материјала сад нудимо) курсеве које нудимо за гимназијалце, где покривамо све ово што сте поменули - алгоритме, матрице итд.
https://petlja.org/net.kabinet/prvi-gim
https://petlja.org/net.kabinet/drugi-gim
https://petlja.org/net.kabinet/treci-gim
(можете за почетак да ИКТ део материјала прескочите)
И ово је већ практично солидан материјал за преквалификацију, и ко ово прође и стварно разуме може на тржишту ИТ рада да буде користан.

Иначе, свака вам част за ову самосталну преквалификацију коју сте започели! Стварно верујем да ћете, уз овакву вољу какву показујте, успети у намери, а ту су и наши материјали а и Алгора чланови да помогну кад зашкрипи негде.

1 Like

Postovanje Teo,
Hvala na pomoci,pogledao sam to,jos mi je i Vas kolega Lazar predocio te kurseve.
To je taman ono sto mogu da razumem.
A sto se tice prekvalifikacije, videcemo imam cilj,imam strategiju, imam podrsku, imam materijale za ucenje pa dokle se stigne .Nesto ce se nauciti i napraviti a to je bitno.
Srdacan pozdrav,
Pedja

2 Likes

Kada se prodje kroz cijeli kod izbacuje gresku za x = int(i[0]), index error: string index out of range. Zbog cega?

Oprostite, nisam pojasnila. Radi se o zadatku s pocetka. Predlozili ste rjesenje medjutım menı ızbacuje gresku koju sam navela.Da li sam ja mozda negdje pogrijesila? Hvala unaprijed.
izlaz = open(“izlaz.txt”,“w”)
with open(“primer.txt”,“r”)as file:
redovi=file.readlines()
string=’’
for i in redovi:
i=i.rstrip("\n\r")
x = int(i[0])
y = int(i[2])
z = x-y
string = str(x)+’-’+str(y)+’=’+str(z)+’\r’
izlaz.write(string)
izlaz.close()

Poštovana Jasna,

Kada pristupate delovima stringa na ovaj način koji je naveden u rešenju, vi tehnički kažete prikaži mi deo stringa koji se nalazi na određenoj poziciji. Dakle i[0] će nam dati prvi karakter u stringu i.

Kada dobijete error da je index out of range (bilo da se radi sa stringovima, listama nizovima i sl), to znači da ste pokušali da pristupite elementu liste (u ovom slučaju stringa) koji ne postoji, to jest da ste pokušali da van opsega liste pronađete nešto. Pošto se ovde radi o prvom elementu stringa, rekao bih da ste naišli na prazan string. Najverovatnije je u vašem ulaznom fajlu negde postojao neki prazan red koji je ona skriptica koju sam napisao pročitala kao prazan string i eto problema.

Ovaj kod koji sam gore ostavio je daleko od savršeno napisanog koda. Poslužio je za demonstraciju kako da se nešto pročita iz fajla, ali kod radi samo pod određenim uslovima. Na primer da nema praznih redova, da je svaki izraz isto formatiran i sl.

Kao što sam gore napisao, dobar zadatak za vežbu je da se ovi izuzeci nekako reše u kodu (na primer, ako naiđeš na prazan red nastavi dalje, ako dobiješ grešku preskoči ga i nastavi dalje i sl.)

Nadam se da sam pomogao.

Lazare imao bih pitanje na ovu temu i ovaj zadatak da li moze bilo koji vid pomoci?

Zdravo,

Da li je isti ovaj zadatak ili neki sličan? Slobodno možete ispod da postujete zadatak i šta ste do sada probali da uradite ili meni lično pošaljite poruku pa ću vam pomoći.

Srdačan pozdrav,
Lazar

Zadatak ide ovako
Potrebno je učitati fajl izrazi.txt u program. Struktura fajla je takva da svaka linija predstavlja jedan izraz u formatu:

4-1 9-3

Dakle, format je

Potrebno je napisati program koji čita taj fajl, liniju po liniju, primenjuje datu operaciju i rezultat zajedno sa pripadajućim izrazom upisuje u fajl izlaz.txt. Voditi računa o newline karakteru i otvaranju, odnosno zatvaranju fajlova.

Izgled fajla izlaz.txt:

4-1=3 9-3=6
Ja sam odradio zadatak ovako
file = open(“izrazi.txt”)
content = file.read()
file.close()

lines = content.split("\n")

for line in lines:

ispis = (f"{line}={eval(line)}")
izlaz.write(ispis)

Ali su mi rekli da je potrebno da podatke upišete u izrazi.txt fajl umesto na standardni izlaz odn. ispišete print funkcijom.Kako sada…

Ako moze ili dodatak na moj rad ili vasa verzija, samo da bih mogao danas da ovaj problem resim jer ocigledno gresim na nekoj gluposti…