|  | 		    
					
        
         
          
         
	
          | |  | D5 og EOF Fra : Hauge
 | 
 Dato :  22-03-06 16:45
 | 
 |  | 
 
            Hej
 Jeg har et "lille" problem..
 Jeg har en textfile som jeg læse ca. som herunder:
 assignfile(fil,'fil.txt');
 reset(fil);
 repeat
   readln(fil,s);
 until eof(fil);
 Mit problem er at i den textfil er der desværre et EOF-tegn, der jo gør at 
 jeg ryger ud af min repeat-until.. Hvordan kan jeg omgåes det, uden at jeg 
 skal læse filen som enkelt-tegn med blockread?
 Er der en rimelig nem måde at lave sin egen EOF-function, så man man 
 overskrive den som Delphi har i forvejen, som istedet for at bruge 
 EOF-tegnet, tjekker om man er i slutningen af filen i stedet for?
 PFT.
 Mvh Hauge 
 -- 
 For at verificere afsenderen af dette indlæg kan du klikke her:
 <http://newscheck.smart-tech.dk/20060322154550@smart-tech.dk> På samme domæne som afsenderen af dette indlæg, ses headerne.
            
             |  |  | 
  Uffe Kousgaard (22-03-2006) 
 
	
          | |  | Kommentar Fra : Uffe Kousgaard
 | 
 Dato :  22-03-06 17:33
 | 
 |  | "Hauge" <hauge@CUTsmart-tech.dk> wrote in message
 news:20060322154550@smart-tech.dk...
 >
 > Mit problem er at i den textfil er der desværre et EOF-tegn, der jo gør at
 > jeg ryger ud af min repeat-until.. Hvordan kan jeg omgåes det, uden at jeg
 > skal læse filen som enkelt-tegn med blockread?
 
 Det lyder ikke som en tekst-fil i så fald. Prøv f.eks. med TFileStream i
 stedet eller blockread, som du selv er inde på.
 
 hilsen
 Uffe
 
 
 
 
 |  |  | 
  Hauge (22-03-2006) 
 
	
          | |  | Kommentar Fra : Hauge
 | 
 Dato :  22-03-06 18:34
 | 
 |  | 
 
            Hej
 Uffe Kousgaard wrote:
 > Det lyder ikke som en tekst-fil i så fald.
 Det er en text-fil, der der består af ganske alm. text, men det system hvor 
 den kommer fra, bruger ascii-26 som Ü, så jeg kører noget tegnkonvertering, 
 hvilket ikke er noget problem. Men det er første gang jeg oplever det tegn 
 være i min fil, og jeg kan desværre ikke bestemme med hvilken tegntabel jeg 
 får filen i..
 Men for at det skal være rimelig hurtigt at læse filerne ind, de er på 
 mellem 50.000 og 1.000.000 linjer, er readln jo en rar ting. Alle linjer 
 afsluttes med #13#10.
 > Prøv f.eks. med
 > TFileStream i stedet eller blockread, som du selv er inde på.
 Så skal jeg jo desværre læse tegn for tegn, indtil jeg støder på #10, 
 hvilket jo tager lang tid, hvis der da ikke findes noget alternativt.
 Mvh Hauge 
 -- 
 For at verificere afsenderen af dette indlæg kan du klikke her:
 <http://newscheck.smart-tech.dk/20060322173419@smart-tech.dk> På samme domæne som afsenderen af dette indlæg, ses headerne.
            
             |  |  | 
  Harald (22-03-2006) 
 
	
          | |  | Kommentar Fra : Harald
 | 
 Dato :  22-03-06 18:57
 | 
 |  | "Hauge" <hauge@CUTsmart-tech.dk> skrev i en meddelelse
 news:20060322154550@smart-tech.dk...
 > Hej
 >
 > Jeg har et "lille" problem..
 > Jeg har en textfile som jeg læse ca. som herunder:
 >
 > assignfile(fil,'fil.txt');
 > reset(fil);
 > repeat
 >  readln(fil,s);
 > until eof(fil);
 >
 > Mit problem er at i den textfil er der desværre et EOF-tegn, der jo gør at
 > jeg ryger ud af min repeat-until.. Hvordan kan jeg omgåes det, uden at jeg
 > skal læse filen som enkelt-tegn med blockread?
 
 Læs f.eks. 50000 bytes ind af gangen med blockeead og så kør
 tegnkonverteringen i denne blok og glem alt om at læse filen som en text
 fil.
 
 /HK
 
 
 
 
 |  |  | 
  Michael Haase (22-03-2006) 
 
	
          | |  | Kommentar Fra : Michael Haase
 | 
 Dato :  22-03-06 20:00
 | 
 |  | Hauge skrev dette den 22-03-2006 16:45:
 > Hej
 >
 > Jeg har et "lille" problem..
 > Jeg har en textfile som jeg læse ca. som herunder:
 >
 > assignfile(fil,'fil.txt');
 > reset(fil);
 > repeat
 >   readln(fil,s);
 > until eof(fil);
 >
 > Mit problem er at i den textfil er der desværre et EOF-tegn, der jo gør at
 > jeg ryger ud af min repeat-until.. Hvordan kan jeg omgåes det, uden at jeg
 > skal læse filen som enkelt-tegn med blockread?
 
 
 Kan du ikke bruge noget àla:
 
 assignfile(fil,'fil.txt');
 > reset(fil);
 > repeat
 >   readln(fil,s);
 > until s[length(s)]=chr(26);
 
 Så vidt jeg lige kan se må det nødvendigvis være det sidste EOF-tegn man
 så stopper ved.
 
 --
 Michael Haase
 
 
 |  |  | 
  Nico de Jong (22-03-2006) 
 
	
          | |  | Kommentar Fra : Nico de Jong
 | 
 Dato :  22-03-06 20:50
 | 
 |  | 
 "Hauge" <hauge@CUTsmart-tech.dk> skrev i en meddelelse
 news:20060322154550@smart-tech.dk...
 > Hej
 >
 > Jeg har et "lille" problem..
 > Jeg har en textfile som jeg læse ca. som herunder:
 >
 > assignfile(fil,'fil.txt');
 > reset(fil);
 > repeat
 >   readln(fil,s);
 > until eof(fil);
 >
 > Mit problem er at i den textfil er der desværre et EOF-tegn, der jo gør at
 > jeg ryger ud af min repeat-until..> -- 
 Jeg plejer at gøre sådan :
 assignfile.....
 reset....
 while not eof(fil) do
 begin
   readln(fil,s);
   (* osv *)
 end;
 Nico
 (Det forbavser mig lidt at Michael ikke har forslået det; han har kigget i
 de fleste af mine programmer. De børn, de børn .....    |  |  | 
  Hauge (22-03-2006) 
 
	
          | |  | Kommentar Fra : Hauge
 | 
 Dato :  22-03-06 21:29
 | 
 |  | 
 
            Hej
 Nico de Jong wrote:
 > Jeg plejer at gøre sådan :
 Ja ok, forskellen er sådan ca. den samme, for den vil desværre fange den 
 forkerte EOF, altså den der er et midt i min stakkels text-fil.
 Men jeg vil i morgen på arb. prøve at se hvad der kan gøres.
 Mvh Hauge 
 -- 
 For at verificere afsenderen af dette indlæg kan du klikke her:
 <http://newscheck.smart-tech.dk/20060322202907@smart-tech.dk> På samme domæne som afsenderen af dette indlæg, ses headerne.
            
             |  |  | 
   Nico de Jong (23-03-2006) 
 
	
          | |  | Kommentar Fra : Nico de Jong
 | 
 Dato :  23-03-06 08:38
 | 
 |  | 
 "Hauge" <hauge@CUTsmart-tech.dk> skrev i en meddelelse
 news:20060322202907@smart-tech.dk...
 > Hej
 > Nico de Jong wrote:
 > > Jeg plejer at gøre sådan :
 >
 > den vil desværre fange den forkerte EOF, altså den der er et midt i min
 stakkels text-fil.
 >
 > Men jeg vil i morgen på arb. prøve at se hvad der kan gøres.
 >
 Jeg har lige prøvet det, og må desværre give dig ret. At jeg så synes at man
 skal  test på EOF _inden_ man læser en linie (der måske ikke er der), er en
 anden sag.
 Jeg kan ikke umiddelbart se hvordan man kan snyde READLN.
 
 Nico
 
 
 
 
 |  |  | 
  Brian Andersen \(www~ (23-03-2006) 
 
	
          | |  | Kommentar Fra : Brian Andersen \(www~
 | 
 Dato :  23-03-06 09:02
 | 
 |  | Prøv følgende:
 
 constructor TMainForm.Create(AOwner: TComponent);
 begin
 inherited;
 FTextStrings := TStringList.Create;
 end;
 
 destructor TMainForm.Destroy;
 begin
 FTextStrings.Free;
 inherited;
 end;
 
 procedure TMainForm.LoadTextFile(FileName: string)
 begin
 FTextStrings.LoadFromFile(FileName);
 end;
 
 procedure TMainForm.HandleFile;
 var
 I: Integer;
 S: string;
 begin
 for I := 0 to FTextStrings.Count -1 dp
 begin
 S :=  FTextStrings[I];
 ..
 ..
 ..
 end;
 end;
 
 /Brian
 
 
 
 
 |  |  | 
  Brian Andersen \(www~ (23-03-2006) 
 
	
          | |  | Kommentar Fra : Brian Andersen \(www~
 | 
 Dato :  23-03-06 09:04
 | 
 |  | >
 > assignfile(fil,'fil.txt');
 > reset(fil);
 > repeat
 >  readln(fil,s);
 > until eof(fil);
 
 Denne loop konstruktion vil fejle, hvis filen er tom. Den bør derfor
 konstrueres som følgende:
 
 AssignFile(Fil, 'Fil.txt');
 Reset(Fil);
 while not Eof(Fil) do
 begin
 ReadLn(Fil, S);
 ..
 ..
 ..
 end;
 
 Ps. Se mit bud på en eventuel løsning med Eof markeringen senere i denne
 tråd.
 
 /Brian
 
 
 
 
 |  |  | 
 |  |