Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

textualna u binarnu datoteku

[es] :: Pascal / Delphi / Kylix :: textualna u binarnu datoteku

[ Pregleda: 2367 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

milos04
Milos Dinic
Beograd

Član broj: 239403
Poruke: 17
*.adsl.eunet.rs.



Profil

icon textualna u binarnu datoteku23.12.2009. u 19:09 - pre 174 meseci
ne znam gde greshim, ali mislim da bi ovo trebal da prebaci textualnu u binarnu datoteku

Program datoteke(ultekst, izbin);
var izbin: file of integer;
ultekst: text;
broj: integer;
begin
assign(ultekst, 'dz5.txt');
assign(izbin, 'dz51.dat');
reset(ultekst); rewrite(izbin);
while not eof(ultekst) do
begin
while not eoln(ultekst) do
begin
read(ultekst, broj);
write(izbin, broj);
end;
readln(ultekst)
end;
close(ultekst);
close(izbin);
end.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: textualna u binarnu datoteku23.12.2009. u 21:13 - pre 174 meseci
> ne znam gde greshim, ali mislim da bi ovo trebal da prebaci textualnu u binarnu datoteku

Tekstualni fajl je istovremeno i binarni, samo zavisi od načina pristupa, razjasni šta tačno želiš da postigneš.
 
Odgovor na temu

milos04
Milos Dinic
Beograd

Član broj: 239403
Poruke: 17
*.adsl.eunet.rs.



Profil

icon Re: textualna u binarnu datoteku23.12.2009. u 22:03 - pre 174 meseci
da bih jednostavnije stvorio ulazne binarne datoteke za glavni program, ovaj mora da cita podatke sa standardnog ulaza i upisuje ih u binarnu datoteku, sa kojom ce glavni program kasnije raditi.

kako onda da pristupim text fajlu kao binarnom?
znam da je text fajl istovremeni i binarni, a jel mogu nekako da taj text fajl sacuvam kao .dat?
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: textualna u binarnu datoteku23.12.2009. u 23:22 - pre 174 meseci
> da bih jednostavnije stvorio ulazne binarne datoteke za glavni program, ovaj mora da cita podatke sa standardnog ulaza i
> upisuje ih u binarnu datoteku, sa kojom ce glavni program kasnije raditi.

Nisam i dalje siguran šta tačno želiš, da pročitaš neke parametre koje korisnik unosi i smestiš ih u neki fajl koji će se kasnije nekako obraditi iz drugog dela programa? Da li te unete paramtre moraš konvertovati pre upisa (npr ako je unet 404 kao string da to pretvoriš u broj 404 i tako snimiš), ako da onda moraš imati neki format u koji ćeš to upisivati, ako ne onda prosto ono što je korisnik uneo upiši u neki fajl.

> kako onda da pristupim text fajlu kao binarnom?
> znam da je text fajl istovremeni i binarni, a jel mogu nekako da taj text fajl sacuvam kao .dat?

Ekstenzija fajla nema veze sa sadržajem, razjasni u kom formatu je fajl, najbolje daj neki primer i šta treba tačno da radiš sa tim fajlom.
 
Odgovor na temu

milos04
Milos Dinic
Beograd

Član broj: 239403
Poruke: 17
*.adsl.eunet.rs.



Profil

icon Re: textualna u binarnu datoteku24.12.2009. u 10:32 - pre 174 meseci
evo sta je potrebno:

a) poziva potprogram koji ucitava sve potrebne podatke iz ulazne binarne datoteke u jednostruko ulancanu listu, tako da redosled podataka u listi bude isti kao u datoteci;
b) poziva odgovarajuci potprogram koji izvrši traženu obradu nad datom listom;
c) poziva potprogram koji ispisuje sve rezultate dobijene u toku obrade;
d) poziva potprogram koji listu briše iz memorije;
e) ponavlja prethodne korake dok korisnik za ime ulazne datoteke ne unese prazan string.

bira najpovoljniju kupovinu auta iz inostranstva; zapis binarne datoteke se sastoji od imena države, stope PDV-a (P, u %), carinske stope (C, u %) i cene auta (A); konacna cena se racuna kao A*(1+P/100)*(1-C/100); iz liste izbaciti zapise sa konacnom cenom vecom od broja unetog putem glavnog ulaza, a zatim urediti preostale zapise po neopadajucoj vrednosti konacne cene; u izlaznu tekst datoteku ispisati uredene zapise u obliku zemlja cena, kao i prosecnu cenu;

Elementi liste su zapisi koji imaju dva polja. Prvo polje je tipa zapisa, cija polja sadrže sve bitne podatke, prema tekstu zadatka. Drugo polje je pokazivac na sledeci element liste. Format izlazne tekst datoteke usvojiti prema tekstu zadatka, tako da sadrži relevantne, ali ne i nepotrebne informacije. Vrednosti kumulativnih rezultata (prosecna ocena, ukupni pazar itd.) odrediti na osnovu elemenata koji ostanu u listi nakon izbacivanja onih koji ne zadovoljavaju kriterijum odreden postavkom zadatka i upisati ih na kraju izlazne tekst datoteke, posle podataka o uredenim zapisima. Ako nešto u postavci zadatka nije dovoljno precizno definisano ili ako su neki od zahteva medusobno suprotstavljeni, usvojiti razumnu pretpostavku i rešiti zadatak korišcenjem te pretpostavke. Osmisliti i napisati na papiru nekoliko primera ulaznih podataka sa kojima ce se program testirati, kao i ocekivani izlaz za odabrane primere. Makar jedan od test primera mora imati više od 5 zapisa. Potprogrami ne smeju pristupati promenljivama glavnog programa direktno, vec samo putem svojih argumenata.

Važno: da bi bilo moguce jednostavno stvoriti ulazne binarne datoteke, napraviti i pomocni program koji cita podatke sa standardnog ulaza i upisuje ih u binarnu datoteku, sa kojom ce glavni program kasnije raditi.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: textualna u binarnu datoteku24.12.2009. u 14:28 - pre 174 meseci
> zapis binarne datoteke se sastoji od imena države, stope PDV-a (P, u %), carinske stope (C, u %) i cene auta (A);

Code:

TAuto = record
  Drzava: string[30];
  PDV: double;
  CS: double;
  Cena: double;
end;

PList = ^TLista;
TLista = record
  Auto: TAuto;
  Next: PLista;
end;


Dakle binarni fajl o kome se govori sadrži recorde tipa TAuto, fajl promenljiva sa kojom ćeš raditi daklariši kao "file of TAuto", dalje koristi standardne funkcije za otvaranje fajla i čitanje. Ujedno prilom čitanja sadržaja tog fajla praviš i jednostruko povezanu listu, to ide otprilike ovako (pseudokod):

Code:

var
  Curr, Prev: PList;
begin
  Curr := nil;
  Prev := nil;
  while not EOF(BinarniFajl) do
  begin
    New(Curr);
    Read(BinarniFajl, Curr.Auto);
    Curr.Next := nil;
    if Assigned(Prev) then
      Prev.Next := Curr;

    Prev := Curr;
  end;
end;


> Važno: da bi bilo moguce jednostavno stvoriti ulazne binarne datoteke, napraviti i pomocni program koji cita podatke sa standardnog
> ulaza i upisuje ih u binarnu datoteku, sa kojom ce glavni program kasnije raditi.

Deklarišeš istu fajl promenljivu kao i za čitanje fajla i potom učitavaš podatak po podatak (drzava, pdv...) i upisuješ ih u fajl.
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: textualna u binarnu datoteku24.12.2009. u 17:17 - pre 174 meseci
Ovo što ću napisati nije vezano za ostale poruke, samo bi konstatovao da ovaj program iz prve poruke radi:

Citat:
milos04:
 ne znam gde greshim, ali mislim da bi ovo trebal da prebaci textualnu u binarnu datoteku

Program datoteke(ultekst, izbin);


Da bi se broj direktno čitao ili pisao u tekstualnom fajlu mora iza njega da bude blanko (razmak) karakter. Iz takvog tekst fajla, recimo:

11 22 33 456 1234
234 567

će program čitati brojeve bez problema. Pisaće ih u "file of integer" isto bez problema. Kada se čita tekst (zadate dužine) iz tekstualnog fajla iza broja mora da se pročita taj blanko karakter pa tek onda tekst. Kada se čita broj iza broja, čita se i taj blanko ispred sledećeg broja pa ne mora posebno da se čita.
 
Odgovor na temu

milos04
Milos Dinic
Beograd

Član broj: 239403
Poruke: 17
*.adsl.eunet.rs.



Profil

icon Re: textualna u binarnu datoteku24.12.2009. u 19:27 - pre 174 meseci
sta je problem ovde?

program citanje;

Type automobil = record
drzava: string[30];
PDV: double;
cs: double;
cena: double;
end;

listpok = ^listzapis;
listzapis = record
zap: automobil;
next: listpok;
end;
var
car: file of automobil;
glava, pok: listpok;





procedure FListu(var glava: listpok);
var podat: listzapis;
car: file of automobil;
novi, posl:listpok;
begin
assign(car, 'dz5.dat');
reset(car);
posl:=nil;
glava:=nil;
while not eof(car) do
begin
read (car, podat);
new(novi);
novi^.next = nil;
novi^.auto = podat.auto;
if glava = nil then
glava:= novi
else
posl^.next := novi;
posl :=novi
end;
close(car);
end;

begin
FListu(glava);
end.
 
Odgovor na temu

milos04
Milos Dinic
Beograd

Član broj: 239403
Poruke: 17
*.adsl.eunet.rs.



Profil

icon Re: textualna u binarnu datoteku24.12.2009. u 20:25 - pre 174 meseci
> Deklarišeš istu fajl promenljivu kao i za čitanje fajla i potom učitavaš podatak po podatak (drzava, pdv...) i upisuješ ih u fajl.

mozesh da mi pojasnis ovo.... ?

recimo da imam fajl npr. automobili.txt:

Nemacka 10% 15% 20000
Italija 11% 17% 20100
Rumunija 12% 12% 19990

kako da je prebacim u .dat?
znam da prebacim npr.:

5 3
2 2 3 4
3 4

ali ovo gore nece :(
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: textualna u binarnu datoteku24.12.2009. u 21:07 - pre 174 meseci
> sta je problem ovde?
> read (car, podat);

Fajl je skup recorda tipa TAuto ne TLista, dakle promeni deklaraciju promenljive podat.

> recimo da imam fajl npr. automobili.txt:
> Nemacka 10% 15% 20000
> Italija 11% 17% 20100
> Rumunija 12% 12% 19990

Ti nemaš takav fajl već raw sadržaj tipa TAuto, podaci u tom falju su (osim države) nečitljivi.

> kako da je prebacim u .dat?

Koliko sam video ne treži se konverzija txt u raw format već kreiranje raw fajla.

Code:

var
  Auto: TAuto;
  f: file of TAuto;
begin
  // Kod za otvaranje fajla
  while Uslov do
  begin
    // Ovde umesto rucne dodele ubaci ucitavanje ovih podataka od korisnika (preko Read ili ReadLn vec sta je pogodno).
    Auto.Drzava := 'Srbija';
    Auto.PDV := 18;
    Auto.CS := 13;
    Auto.Cena := 2000;

    Write(f, Auto);
  end;
  
  // Kod za zatvaranje fajla
end;


 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: textualna u binarnu datoteku25.12.2009. u 05:25 - pre 174 meseci
Ne ulazim u to šta se traži zadatkom (jer to verujem ne zavisi direktno od znanja) nego samo u tehničke detalje.

Citat:
milos04:

recimo da imam fajl npr. automobili.txt:

Nemacka 10% 15% 20000
Italija 11% 17% 20100
Rumunija 12% 12% 19990

kako da je prebacim u .dat?


Može da bude ovako formatiran tekstualni fajl:

Nemacka 10 15 20000
Italija 11 17 20100
Rumunija 12 12 19990

ili konkretno:

array[0..n] of char
razmak
broj prvi
razmak
broj drugi
razmak
broj treći
crlf iliti kraj linije

To su podaci zapisani u određenom formatu i redosledu pa se podrazumeva šta je postotak a šta ne. Zbog toga nema potrebe da brojevi budu upisivani kao tekst, a sa karakterom % postaju tekst. Onda može da se čita i piše:

br1, br2, br3: integer;
ImeDrzave: array[0..20] of char;
blanko: char;// blano := ' ';
...
readln(tekstFajl, ImeDrzave, br1, br2, br3);
writeln(tekstFajl, ImeDrzave:20, blanko, br1, blanko, br2, blanko, br3);
 
Odgovor na temu

milos04
Milos Dinic
Beograd

Član broj: 239403
Poruke: 17
*.adsl.eunet.rs.



Profil

icon Re: textualna u binarnu datoteku26.12.2009. u 11:18 - pre 174 meseci
hvala, uspeo sam :)

samo sam morao drzavu da prebacujem slovo po slovo. pozz

Program datoteke;
uses crt;
var br1,br2,br3: integer;
c,p: char;
ultekst,izbin:text;
begin
clrscr;
assign(ultekst, 'dz5.txt');
assign(izbin, 'dz5.dat');
reset(ultekst); rewrite(izbin);
c:=' ';
while not eof(ultekst) do
begin
read(ultekst, p);
while not (p=' ') do
begin
write(izbin,p);
read(ultekst,p);
end;
readln(ultekst,br1, br2, br3);
writeln(izbin,c, br1, c, br2,c, br3);
end;
close(ultekst);
close(izbin);
end.
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: textualna u binarnu datoteku26.12.2009. u 12:27 - pre 174 meseci
Samo bi napomenuo da je ovo ("samo") pisanje i čitanje tekstualnog fajla. To sam napisao jer je takvo pitanje bilo u prvoj poruci a zadatkom se to ne traži nego ono što je savkic pisao...

Citat:
milos04:

samo sam morao drzavu da prebacujem slovo po slovo. pozz



Moglo je samo slovo po slovo kada se napiše ovako kako sam se vidi u ovo mojoj poruci:

Citat:
tkaranovic

Nemacka 10 15 20000
Italija 11 17 20100
Rumunija 12 12 19990



Da sam stavio tagove za kod videlo bi se da je ovo pravi format:

Code:

             Nemacka 10 15 20000
             Italija 11 17 20100
            Rumunija 12 12 19990


20 karaktera za ime države pa onda brojevi.
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: textualna u binarnu datoteku

[ Pregleda: 2367 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.