Avatar billede danielks Nybegynder
05. december 2002 - 18:46 Der er 17 kommentarer og
3 løsninger

Skriv til fil

Hvordan får man delphi til at TILFØJE en værdi til en fil...

Hvordan får man delphi til at Erstatte en værdi i en fil...

Hvordan får man delphi til at slette en værdi i en fil...

Hvordan får man delphi til at slette alt i en fil...

Pointene er for svar på alle spg's
Avatar billede medions Nybegynder
05. december 2002 - 18:50 #1
VAR
  TestStr : STRING;


procedure TForm1.ReadButtonClick(Sender: TObject);
var
  WinIni: TIniFile;
begin
  WinIni := TIniFile.Create(\'Win.Ini\');
  with WinIni do
  begin
    TestStr := ReadString(\'Test\', \'TestStr\', \'Default text her\');
  end;
  WinIni.Free;
end;




procedure TForm1.WriteButtonClick(Sender: TObject);
var
  WinIni: TIniFile;
begin
  WinIni := TIniFile.Create(\'Win.Ini\');
  with WinIni do
  begin
    WriteString(\'Test\', \'TestStr\', TestStr);
  end;
  WinIni.Free;
end;

//>Rune
Avatar billede danielks Nybegynder
05. december 2002 - 18:54 #2
[Error] Unit1.pas(29): Undeclared identifier: 'TIniFile'
[Error] Unit1.pas(31): Missing operator or semicolon
[Error] Unit1.pas(31): Incompatible types: 'TComponent' and 'String'
[Error] Unit1.pas(34): Undeclared identifier: 'ReadString'
[Error] Unit1.pas(34): Illegal character in input file: '\' ($5C)
[Error] Unit1.pas(34): Illegal character in input file: '\' ($5C)
[Error] Unit1.pas(36): Missing operator or semicolon
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'

fejl i:

WinIni: TIniFile;
Avatar billede slowaterz Nybegynder
05. december 2002 - 18:59 #3
Det fælgende er kun afprøvet med tekstfiler.

Man starter, selvfølgeligt, med AssignFile(f, fName);

For at tilføje til filen, åbner man den med "Append(f)";

For at slette alt i en fil, bruger man "Rewrite(f)";

De andre to er mere tricky. Man kan åbne filen med "Reset(f)" og derefter gennemløbe filen i en løkke "while not f.EOF do Readln(f, myString)". For hver linie kan man kalde "Pos(valueString, myString)" for at lede efter den ønskede værdi (valueString). Ved at ændre i den indlæste streng (myString) og skrive den tilbage til filen kan man så erstatte eller slette værdien.
Avatar billede gizmo-gizmo Nybegynder
05. december 2002 - 19:03 #4
Det kan gøres på forskellige måder.
Denne guide synes jeg, er god til at lære det med:
http://delphi.about.com/library/weekly/aa110999.htm
Avatar billede danielks Nybegynder
05. december 2002 - 19:03 #5
f ???
Avatar billede gizmo-gizmo Nybegynder
05. december 2002 - 19:05 #6
det får du blandt andet svar på ved at læse mit link ;-)
Avatar billede slowaterz Nybegynder
05. december 2002 - 19:10 #7
f er en variabel af typen TextFile; fName er en String, hvor dit finavn skal være
Avatar billede slowaterz Nybegynder
05. december 2002 - 19:11 #8
undskyld, der skulle have stået "filnavn"

og man skal huske at kalde "CloseFile(f)"
Avatar billede danielks Nybegynder
05. december 2002 - 19:14 #9
Oki jeg fatter ik så meget...

Kan i ikke skrive et script hvor filen hedder data.db i  samme bibliotek som exe...
Avatar billede danielks Nybegynder
05. december 2002 - 19:15 #10
...til både read og write...
Avatar billede coltau Juniormester
05. december 2002 - 23:05 #11
Er det en tekstfil eller en med fast kendt format. ?
Avatar billede danielks Nybegynder
06. december 2002 - 08:55 #12
en txt fil (data.txt) der er omdøbt til data.db
Avatar billede Slettet bruger
06. december 2002 - 18:15 #13
Fra Fins Delphi tips:

Nedenstående er ikke en rigtig procedure, men en liste
over de funktioner, man bruger til at læse fra, skrive til
og tilføje til en fil.

procedure TForm.Button1Click(Sender: TObject);
var
fil : textfile;
txtTemp, sti : String;
begin
    txtTemp := 'Et eller andet.';
    sti := 'c:\sti\navn.ext';
    assignfile(fil, sti);

//LÆS FRA FIL
    reset(fil); //åbner filen for læsning
    readln(fil, txtTemp);  //læs fra fil
    Flush(fil); //sikrer at der er skrevet til disk (ifald der skal opereres på filen straks herefter)
    closefile(fil);

//SKRIV TIL NY FIL
    Rewrite(fil); //åbner ny fil for skrivning
    Writeln(fil, txtTemp); //skriv til fil
    closefile(fil);

//TILFØJ TIL FIL
    Rewrite(fil); //åbner ny fil for skrivning
    Append(fil);  //placerer fil pointer i enden af filen, klar til at TILFØJE noget til den
    Writeln(fil, txtTemp); //skriv til fil
    closefile(fil);
end;
Avatar billede danielks Nybegynder
09. december 2002 - 18:50 #14
Det jeg skal lave, er et program der propper punktummer ind i en fil indtil der ikke er mere plads på hdd'en...
Og jeg kan ikke finde ud af at indsætte det i skriver i et projekt... Så den den uploader / sender et funktionelt PROJEKT i delphi render med de 150 point... (den skal skrive dem så hurtigt som muligt...)
Avatar billede danielks Nybegynder
09. december 2002 - 18:59 #15
oki det virker med tilføj tingen... men kun en gang... når man trykker igen skriver den det ikke igen...
Avatar billede danielks Nybegynder
09. december 2002 - 19:04 #16
...den overskriver fandt jeg lige ud af ved at skrive noget andet som "txtTemp"

jeg bruger denne:

    Rewrite(fil); //åbner ny fil for skrivning
    Append(fil);  //placerer fil pointer i enden af filen, klar til at TILFØJE noget til den
    Writeln(fil, txtTemp); //skriv til fil
    closefile(fil);
Avatar billede siz23 Nybegynder
11. december 2002 - 09:57 #17
//TILFØJ TIL FIL
    Rewrite(fil); //åbner ny fil for skrivning << drop denne linje den sletter den gamle fil og laver en ny.... ;)

men så vil de komme med fejl hvis filen ikke eksistere, men du kan bruge følge løsning.

//tilføj
var f:TextFile;
begin
    assignFile(F,'dit.filnavn');
    if FileExists('dit.filnavn')
    then append(F)
    else ReWrite(F);
    writeln(F,'something');
    CloseFile(F);
end;
Avatar billede siz23 Nybegynder
11. december 2002 - 09:59 #18
reset()= sætter fil pointeren i starten af filen.
append()= sætter fil pointeren i sluningen af filen.
ReWrite()= sætter fil pointeren til både start og slut. Det vil sige den laver en ny fil...
Avatar billede medions Nybegynder
26. december 2002 - 17:59 #19
Thx 4 Poinz

//>Rune
Avatar billede challenger Nybegynder
13. november 2004 - 16:02 #20
Nogen der ved om det er muligt at undlade at skrive en direkte sti til filen i assignFile?
Jeg havde håbet på at Delphi selv kunne finde ud af, at filen lå sammen med programmet hvis man skrev assignFile(F, 'fil.txt');
Men det virker kun, hvis jeg skriver den komplette sti. Absolutte sti.
Feks: assignFile(F, 'C:\Dokumenter\Delphi\projekt\Filprogram\fil.txt');
Hvor C:\Dokumenter\Delphi\projekt\Filprogram\ er der hvor .pas m.m. ligger...
Det jeg savner er en relativ sti.
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