Avatar billede pzw Nybegynder
10. oktober 2003 - 13:39 Der er 19 kommentarer og
1 løsning

Skrive videre på textfil

Hvordan skriver jeg videre på en eksisterende textfil.
Åbne filen
Gå til slutningen af filen
Skrive nogle linier
Lukke filen

Det er "Gå til slutningen af filen" der er problemet.

Bemærk: Det er en textfil.
Avatar billede Slettet bruger
10. oktober 2003 - 13:48 #1
Hvis du bruger AssignFile, CloseFile osv.. kan du bruge Append.

http://www.udvikleren.dk/article.php?aid=29&techid=2
Avatar billede snowball Novice
10. oktober 2003 - 13:48 #2
function AppendOrWriteTextToFile(FileName: TFilename; WriteText: string): Boolean;
var
  f: Textfile;
begin
  Result := False;
  AssignFile(f, FileName);
  try
    if FileExists(FileName) = False then
      Rewrite(f)
    else
    begin
      Reset(f);
      Append(f);
    end;
    Writeln(f, WriteText);
    Result := True;
  finally
    CloseFile(f);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  AppendOrWriteTextToFile('c:\test.txt', Edit1.Text)
end;

Snowball
Avatar billede snowball Novice
10. oktober 2003 - 13:50 #3
Hvis filen allerede findes, så tilføjes det der står i Edit1 bare i bunden af filen. Findes filen ikke i forvejen, så opretter den filen og tilføjer det der står i Edit1.

Snowball
Avatar billede borrisholt Novice
10. oktober 2003 - 13:56 #4
Brug TStringList
Avatar billede athlon-pascal Juniormester
10. oktober 2003 - 13:56 #5
Det er mange måder at gøre det på, også denne:

var
  FileName, S: String;
  FStream: TFileStream;
begin
  S := ' Hest!';
  FileName := 'c:\test.txt';
  FStream := TFileStream.Create(FileName, fmOpenReadWrite);
  try
    FStream.Position := FStream.Size;
    FStream.Write(S[1], Length(S));
  finally
    FStream.Free;
  end;
end;
Avatar billede athlon-pascal Juniormester
10. oktober 2003 - 13:58 #6
Jens -> Det kommer an på om man vil tilføje linjer, eller om man bare vil tilføje noget tekst til den nederste linje...

Men ellers:

var
  SList: TStringList;
  FileName: String;
begin
  FileName := 'c:\test.txt';

  SList := TStringList.Create;
  try
    if FileExists(FileName) then
      SList.LoadFromFile(FileName);
    SList.Text := SList.Text + ' Hest!';
    SList.SaveToFile(FileName);
  finally
    SList.Free;
  end;
end;
Avatar billede athlon-pascal Juniormester
10. oktober 2003 - 14:07 #7
Hvis du vælger at bruge TFileStream, så brug denne i stedet, der er ingen grund til at åbne filen til læsning:

var
  FileName, S: String;
  FStream: TFileStream;
begin
  S := ' Hest!';
  FileName := 'c:\test.txt';
  FStream := TFileStream.Create(FileName, fmOpenWrite    );
  try
    FStream.Position := FStream.Size;
    FStream.Write(S[1], Length(S));
  finally
    FStream.Free;
  end;
end;
Avatar billede athlon-pascal Juniormester
10. oktober 2003 - 14:32 #8
Den her laver også en ny fil, hvis ikke den findes:

function AddStringToFile(FileName, S: String): Integer;
var
  FStream: TFileStream;
begin
  Result := 0;

  try
    if FileExists(FileName) then
      FStream := TFileStream.Create(FileName, fmOpenWrite)
    else
      FStream := TFileStream.Create(FileName, fmCreate);
  except
    Result := 1;
    Exit;
  end;

  try
    FStream.Position := FStream.Size;
    if FStream.Write(S[1], Length(S)) <> Length(S) then
    begin
      Result := 2;
      Exit;
    end;
  finally
    FStream.Free
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if AddStringToFile('c:\test.txt', ' Hest2!') <> 0 then
    ShowMessage('Fil-fejl!');
end;
Avatar billede athlon-pascal Juniormester
10. oktober 2003 - 14:37 #9
Den her er mere overskuelig:

function AddStringToFile(FileName, S: String): Boolean;
var
  FStream: TFileStream;
begin
  Result := false;

  if FileExists(FileName) then
    FStream := TFileStream.Create(FileName, fmOpenWrite)
  else
    FStream := TFileStream.Create(FileName, fmCreate);

  if FStream <> nil then
  try
    FStream.Position := FStream.Size;
    Result := FStream.Write(S[1], Length(S)) = Length(S);
  finally
    FStream.Free
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if not AddStringToFile('c:\test.txt', ' Hest2!') then
    ShowMessage('Fil-fejl!');
end;
Avatar billede pzw Nybegynder
12. oktober 2003 - 19:14 #10
Tak for jeres råd, problemet er løst nu.
//PZ
Avatar billede athlon-pascal Juniormester
12. oktober 2003 - 19:20 #11
Du kunne ikke bruge nogle af svarene?
Avatar billede pzw Nybegynder
12. oktober 2003 - 19:24 #12
Jo, jeg brugte Append, jeg ved ikke helt hvad der gik galt, det er nok fordi det er en tekstfil og den metode jeg normalt benytter til "file of record" ikke virker.
//PZ
Avatar billede athlon-pascal Juniormester
12. oktober 2003 - 19:28 #13
Du har altså brugt nogle af de svar der er kommet her. Hvorfor har du så afvist Snowballs svar?
Avatar billede pzw Nybegynder
12. oktober 2003 - 19:33 #14
På grund af en fejl 40.
Jeg prøver igen hvis det er muligt !!!
//PZ
Avatar billede athlon-pascal Juniormester
12. oktober 2003 - 19:38 #15
Det er det ikke nu, men du kan få dem, hvis løsning du brugte, til at lægge et svar, og så bliver det muligt :-)
Avatar billede pzw Nybegynder
12. oktober 2003 - 19:44 #16
hejhej var først med det "rigtige" svar, så læg et svar igen så giver jeg gerne point.
//PZ
Avatar billede snowball Novice
12. oktober 2003 - 20:55 #17
pz: Øh, først skriver du at det var en fejl du afviste mit svar, og derefter vil du give hejhej point'ene. Kan du bestemme dig !? ;)

Snowball
Avatar billede Slettet bruger
13. oktober 2003 - 09:11 #18
Svar :)
Avatar billede pzw Nybegynder
15. oktober 2003 - 21:33 #19
hejhej skal lægge et svar, ikke kommentar, for at jeg kan tildele point !!!
Avatar billede Slettet bruger
16. oktober 2003 - 10:32 #20
Ups :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester