Pereiti prie turinio

Pascal: string skaitymas iš failo, kai toje eilutėje yra dar duomenų


Rekomenduojami pranešimai

Sveiki, truputį kandžiojasi pascal'is, nesuprantu, kas jam netinka.

 

Faile turiu duomenis tokiu formatu:

Mano super string'as 5 1 3 7 ir dar n skaičių

Žinoma, string'as užima būtent tiek vietos, kokį ilgį aš nurodau prie kintamųjų.

 

Taip pat turiu

type my_type=record
name : string[20];
end;

 

Na ir esmė tokia, kad skaitant iš failo naudojant readln, tai jis paima visą eilutę ir sukiša ją į string'ą (kaip ir turėtų būti), tačiau man reikia tik pirmųjų 20 simbolių. Mėginu naudoti paprastą read, o paskui su ciklu paimti toliau esančius skaičius skaičius, tačiau tokiu atveju nuskaitomas tuščias string, o pačių skaičių išvis nenuskaito.

 

Kas čia yra tokio, ko aš nežinau?:)

 

EDIT: radau workaround'ą, tačiau manau čia ne išeitis. Atrodo lyg blogai parašytas duomenų failas, tačiau vizualiai jis atrodo geras. Nuskaičius kiekvieną eilutę reikia pakartotinai padaryti readln, tada viskas lyg ir pavyksta. :huh:

Redagavo aemdy
Nuoroda į pranešimą
Dalintis kituose puslapiuose

EDIT: radau workaround'ą, tačiau manau čia ne išeitis. Atrodo lyg blogai parašytas duomenų failas, tačiau vizualiai jis atrodo geras. Nuskaičius kiekvieną eilutę reikia pakartotinai padaryti readln, tada viskas lyg ir pavyksta. :huh:

 

Tai pas tave viena eilute ar daug? Nes is ankstesnio uzraso atrodo, kad eilute viena ir Read neveikia isvis..

Bet jeigu tau sprendimas suveikia panaudojus Readln kiekvienos eilutes nuskaitymo gale - tai viskas cia kaip ir turi buti, o ne workaroundas. Read nemoka nuskaityt naujos eilutes simbolio.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tai pas tave viena eilute ar daug? Nes is ankstesnio uzraso atrodo, kad eilute viena ir Read neveikia isvis..

Bet jeigu tau sprendimas suveikia panaudojus Readln kiekvienos eilutes nuskaitymo gale - tai viskas cia kaip ir turi buti, o ne workaroundas. Read nemoka nuskaityt naujos eilutes simbolio.

 

http://pastebin.com/aQVvbbVm - štai duomenų failas.

Na su workaround'u viskas veikia sklandžiai. Tikiuos per egzaminą nesikandžios, bet turėčiau spėt sutvarkyti, nes tas praktines užduotis padaryti netrunka.:)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

http://pastebin.com/aQVvbbVm - štai duomenų failas.

Na su workaround'u viskas veikia sklandžiai. Tikiuos per egzaminą nesikandžios, bet turėčiau spėt sutvarkyti, nes tas praktines užduotis padaryti netrunka.:)

 

Taigi as tau ir sakau, kad Readln yra ne workaround'as, o butinybe jeigu skaitai su Read ir duomenys per kelias eilutes eina.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Juk nieko sunkaus. Naudoji Read ir ciklą, po Read ciklo parašai ReadLn(F1); perkels skaitymą į eilutės pradžia ir vėl iš naujo nuskaitai pavyzdys.

program Bevardė0;
var F1:text;
pav:string[15];
n,k,i,j,a:integer;
begin
assign(F1,'duom.txt');
reset(F1);
//nuskaitome n ir k
readln(F1,n,k);

//nuskaitome pirmus duomenis
for i:=1 to n do
begin
   	read(F1,a);
   	write(a,' ');
end;
//perkialeme žymeklius į pradžia eilutės.
readln(F1);
writeln;

//nuskaitome iki tiek kiek yra duotų duomenų k
for i:=1 to k do
begin
   	//nuskaitome pavadinimą.
   	read(F1,pav);
   	write(pav,' ');
   	//toliau nuskaitome duotus skaičius.
   	for j:=1 to n do
   	begin
       	read(F1,a);
       	write(a,' ');
   	end;
   	//perkialiame į pradžia
   	readln(F1);
   	writeln;
end;
close(F1);
Readln;
end.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Juk nieko sunkaus. Naudoji Read ir ciklą, po Read ciklo parašai ReadLn(F1); perkels skaitymą į eilutės pradžia ir vėl iš naujo nuskaitai pavyzdys.

program Bevardė0;
var F1:text;
pav:string[15];
n,k,i,j,a:integer;
begin
assign(F1,'duom.txt');
reset(F1);
//nuskaitome n ir k
readln(F1,n,k);

//nuskaitome pirmus duomenis
for i:=1 to n do
begin
   	read(F1,a);
   	write(a,' ');
end;
//perkialeme žymeklius į pradžia eilutės.
readln(F1);
writeln;

//nuskaitome iki tiek kiek yra duotų duomenų k
for i:=1 to k do
begin
   	//nuskaitome pavadinimą.
   	read(F1,pav);
   	write(pav,' ');
   	//toliau nuskaitome duotus skaičius.
   	for j:=1 to n do
   	begin
       	read(F1,a);
       	write(a,' ');
   	end;
   	//perkialiame į pradžia
   	readln(F1);
   	writeln;
end;
close(F1);
Readln;
end.

 

Na taip, šitaip tai veikia, ačiū už pagalbą visiems! :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...