/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
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



Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409071
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste