Nedokončování čtení souboru. – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Nedokončování čtení souboru. – Pascal – Fórum – Programujte.comNedokončování čtení souboru. – Pascal – Fórum – Programujte.com

 

24. 8. 2009   #1
-
0
-

Nyní mám problém se čtením souboru až do konce, ale nevím proč.

if fR=1 then begin
assign(compile,filename);
assign(temp,'System/Temporary.txt');
rewrite(temp);
reset(compile);

repeat q:=0; OC:='';
readln(compile,O);

d:=integer(O[0]);
for k:=1 to d do
begin
p:=char(O[k]);
if ((p='G')or(p='M')or(p='X')or(p='Y')) then q:=1;
if q=1 then OC:=OC+p;
end;
writeln(temp,OC)
until eof(compile);

Na písmena G,M,X,Y narazí vždy, na jedno z nich na každém řádku.
Ono to ten soubor přepíše celý, ale několik málo posledních řádků ne prostě.
Udám jako příklad: soubor má 10 000 řádků, ale překopíruje jich pouze 9 995. 100 000, překopíruje pouze 99 995.
Proč?!?!?!?

Nahlásit jako SPAM
IP: 89.190.90.–
Mircosoft+1
Věrný člen
24. 8. 2009   #2
-
0
-

Asi nejpravděpodobnější příčina je to, že jsi soubory před ukončením programu nezavřel (příkaz Close(soubor)). Je možné, že se z nějakého důvodu nezavřely automaticky a posledních pár řádků zůstalo někde v nějakém bufferu v paměti a ne zapsaných na disk.

Další věc: pro jaký OS kompiluješ?
Jestli pro DOS, tak pozor, že jméno souboru může být maximálně 8 znaků dlouhé ("Temporary" už je moc).
Jestli pro DOS, Windows nebo prostě cokoli jiného než Unix nebo Linux, tak pozor, že adresáře se oddělují zpětným lomítkem ("\") a ne normálním ("/").
Tohle by mohl být závažný problém, ale s nedočítáním konce souboru nesouvisí.

Co automatická kontrola I/O {$I+ nebo -}? Máš ji zapnutou nebo vypnutou? Možná by se vyplatilo zkontrolovat, jestli při čtení souboru nedošlo k nějaké chybě.

Kdyžtak sem hoď i definice všech proměnných, takhle se můžu jenom dohadovat o jejich typech a významu, protože takovéhle jednopísmenné zkratky nic neřeknou.

Prakticky všechny chyby se dají najít při krokování: na vhodné místo si dej breakpoint (najeď kurzorem na řádek a zmáčkni Ctrl+F8). Na něm se program zastaví a přes Watches (Ctrl+F7) můžeš kontrolovat aktuální hodnoty proměnných, klávesou F8 krokovat po řádcích nebo Ctrl+F9 zase rozjet normální rychlostí.


A ještě pár drobných připomínek, bez vlivu na funkci:

Jestli dobře chápu, že O je string, tak délku čti jako byte a ne jako integer, aby nehrozilo, že se do ní zahrnou první dva bajty místo jednoho. Nebo ještě lépe funkcí Length. Ale to už je spíš otázka vkusu. A jestli p je typu char, tak je explicitní přetypovávání při čtení znaků řetězce zbytečné.

> if ((p='G')or(p='M')or(p='X')or(p='Y')) then q:=1;
Kdyby bylo q typu boolean, dělaly by se s ním logické podmínky pohodlněji (místo "q:=1" by bylo "q:=true" a místo "if q=1" jenom "if q"). A ta podmínka se dá zapsat i pohodlněji jako "if p in ['G','M','X','Y'] then...". To ovšem nejsou chyby.

Nahlásit jako SPAM
IP: 130.119.248.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
24. 8. 2009   #3
-
0
-

To Mircosoft : :D
Tak tos mě teda úplně tozbil, takový kvantum informací :D
Mno, co sem pobral a eště chápal, programuju pro Windows, přičemž uses používám dos,crt.
Ale teďkon jsem zkusil uzavřít ten soubor a ono to tam je!!!! JUpíííííí :D
Nj,ono asi pul milionu řádků se jen tak na rychlo neuloží do toho souboru než se ten program zavře :)
A tamty všechny ostatní rady ... to si ještě několikrát přečtu a snad to pochopím jakym jazykem kromě Pascaloviny si to na mě mluvil :D
Děkuju moc

Nahlásit jako SPAM
IP: 89.190.90.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 3 hosté

Podobná vlákna

čtení ze souboru — založil Jakub Vojáček

čtení ze souboru — založil witsarah

Cteni ze souboru — založil Mory

Cteni souboru. — založil ewzen

Čtení souboru ve VB — založil hansk

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý