Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ListView Items in einer TextDatei speichern (https://www.delphipraxis.net/17863-listview-items-einer-textdatei-speichern.html)

alanblack 10. Mär 2004 18:34


ListView Items in einer TextDatei speichern
 
Hallo Leute,

habe wiedermal ein problem :?

und zwar möchte ich dass eingetragende items in einer TextDatei gespeichert werden.
habe schon

Delphi-Quellcode:
ListView1.Items.SaveToFile(ExtractFilePath(ParamStr(0))+'Dateiname.txt');
ausprobiert funzt jedoch auch nicht, es kommt dann diese fehlermeldung:

Delphi-Quellcode:
Unit1.pas(53): Undefinierter Bezeichner: 'SaveToFile'
ich hoffe ihr könnt mir helfen

Viele Grüße

alanblack

MathiasSimmack 10. Mär 2004 18:40

Re: ListView Items in einer TextDatei speichern
 
Ja, das kann nicht funktionieren, weil es diese Funktion bei der List-View nicht gibt.
Also: selbst machen. ;)

Albi 10. Mär 2004 18:41

Re: ListView Items in einer TextDatei speichern
 
Das kannst Du über eine Schleife erledigen, lese die einzelnen Zeilen aus und schreibe sie in die Txt.

So in etwa:

Delphi-Quellcode:
rocedure TForm14.ExportInTxt;
var f: TextFile;
    i,j: Integer;
    tmp: String;
begin
  AssignFile(f,ExtractFilePath(Application.ExeName)+'SerienTxt.txt');
  rewrite(f);
  WriteLn(f, 'Vorname;Name;Firma;Strasse;PLZ;Ort;');
  for i := 0 to ListView1.Items.Count-1 do
    begin
      tmp := ListView1.Items.Item[i].Caption + ';';
      for j:= 0 to ListView1.Columns.Count-2 do
        tmp := tmp + ListView1.Items.Item[i].SubItems[j] + ';';
        WriteLn(f, tmp);
      end;
   CloseFile(f);
end;
Wenn Du hier im Form suchst, findest Du noch mehr Lösungsvorschläge.

CalganX 10. Mär 2004 18:41

Re: ListView Items in einer TextDatei speichern
 
Hi,
was Mathias damit sagen will: du musst Zeile für Zeile und Spalte für Spalte durchgehen und das abspeichern oder XML verwenden.

Chris

Markus K. 10. Mär 2004 18:42

Re: ListView Items in einer TextDatei speichern
 
Hi alanblack,
SaveToFile gibt es nur bei den SubItems.
Delphi-Quellcode:
ListView1.Items.Item[].SubItems.SaveToFile();
Vielleicht hilft es dir ein wenig.

Tschüß Markus

MathiasSimmack 10. Mär 2004 18:43

Re: ListView Items in einer TextDatei speichern
 
Zitat:

Zitat von Chakotay1308
oder XML verwenden.

Immer der Typ mit seinem XML. :mrgreen:

alanblack 10. Mär 2004 19:02

Re: ListView Items in einer TextDatei speichern
 
Zitat:

Zitat von Markus K.
Delphi-Quellcode:
ListView1.Items.Item[].SubItems.SaveToFile();

was kommt denn bei Item[] in den [] rein?

mfg alanblack

Albi 10. Mär 2004 19:09

Re: ListView Items in einer TextDatei speichern
 
Der jeweilige Item[1],Item[2] oder in einer Schleife i.

alanblack 10. Mär 2004 19:21

Re: ListView Items in einer TextDatei speichern
 
hoi,

joah funzt es wird jedenfalls compilert, aber wenn ich nun die items angelegt habe (im externen programm (project1.exe)) und dann auf save klicke kommt eine Fehlermeldung Zugriffsverletzung Project1... was bedeutet das und wie kann ich den Bug entfernen?

hier nocheinmal den kompletten Quellentext:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
With ListView1 Do
  Begin
    Columns.Clear;
    Columns.Add.Caption := 'Deutsch';
    Columns.Add.Caption := 'Englisch';

    ShowColumnHeaders := True;
    ViewStyle := vsReport;

    With Items.Add Do
    Begin
      Caption := Edit1.Text;
      SubItems.Add(Edit2.Text);
    End;

  End;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ListView1.Items.Item[1].SubItems.SaveToFile('datei.txt');
end;

end.
Viele Grüße

fkerber 10. Mär 2004 19:28

Re: ListView Items in einer TextDatei speichern
 
Hi!

Bei mir geht der Quellcode einwandfrei.
Es wird zwar nur 1 Zeile gespeichert (liegt wohl am Code, habe aber nicht näher analysiert), aber es kommt keine ZV.


Ciao fkerber

Robert_G 10. Mär 2004 20:05

Re: ListView Items in einer TextDatei speichern
 
Wie beim TV-Koch:
Ich habe da mal was vorbereitet... :mrgreen:

Happy :coder:

Speichern:

Delphi-Quellcode:
Var
  SaveList: TStrings;
  i, j: Integer;
  TempStr: String;
// Den kannst du auch global definieren, du kannst dafür nehmen was du willst
Const
  Delimitter = #14;

Begin
  If Not SaveDialog1.Execute Then Exit;
  SaveList := TStringList.create;
  Try
    // Dein ListView
    With ListView1 Do
    Begin
      // Laufe durch alle Items
      For i := 0 To pred(Items.Count) Do
      Begin
        TempStr := '';
        With Items[i] Do
          // Laufe durch alle SubItems
          For j := 0 To pred(SubItems.Count) Do
            TempStr := TempStr + Delimitter + SubItems[j];

        SaveList.Add(Items[i].Caption + TempStr);
      End;

    End;
    // Speichern
    SaveList.SaveToFile(SaveDialog1.FileName);
  Finally
    // Freigeben ...
    FreeAndNil(SaveList);
  End;
End;

Laden:

Delphi-Quellcode:
Var
  LoadList: TStrings;
  i, ActPos, PrevPos: Integer;
// siehe oben...
Const
  Delimitter = #14;

Begin
  If Not OpenDialog1.Execute Then Exit;
  LoadList := TStringList.create;

  Try
    // Laden...
    LoadList.LoadFromFile(OpenDialog1.FileName);
    // Lösche den ListView
    ListView1.Items.Clear;

    // Laufe durch Zeilen der StringList
    For i := 0 To pred(LoadList.Count) Do
    Begin
      PrevPos := 1;
      ActPos := 1;
      // Erste Position des Delimitters
      ActPos := PosEx(Delimitter, LoadList[i], succ(ActPos));
      // Erstelle Item
      With ListView1.Items.Add Do
      Begin
        // setze Caption des neuen Items
        Caption := Copy(LoadList[i], PrevPos, (ActPos - PrevPos));
        PrevPos := succ(ActPos);
        // erzeuge für jeden gefundenen Delimitter ein SubItem
        Repeat
          ActPos := PosEx(Delimitter, LoadList[i], succ(ActPos));
          If ActPos <> 0 Then
            SubItems.Add(Copy(LoadList[i], PrevPos, (ActPos - PrevPos)))
          Else
            SubItems.Add(Copy(LoadList[i], PrevPos, Length(LoadList[i])));
          PrevPos := succ(ActPos);
        // Wenn ActPos = 0 (kein Delimitter gefunden) -> fertig
        Until ActPos = 0;
      End;
    End;

  Finally
    // Freigeben...
    FreeAndNil(LoadList);
  End;
End;

Robert_G 10. Mär 2004 21:59

Re: ListView Items in einer TextDatei speichern
 
Liste der Anhänge anzeigen (Anzahl: 2)
Versuche es mal damit.
Bei mir klappt es problemlos.

citybreaker 3. Apr 2004 16:25

Re: ListView Items in einer TextDatei speichern
 
Bei mir kommt immer eine Fehlermeldung names "Undefinierter bezeichner 'PosEx'."

[edit=MrSpock]Doppelpost gelöscht. Mfg, MrSpock[/edit]

Robert_G 3. Apr 2004 16:33

Re: ListView Items in einer TextDatei speichern
 
StrUtils zur USES Clauses hinzufügen.

citybreaker 3. Apr 2004 19:51

Re: ListView Items in einer TextDatei speichern
 
"Datei nicht gefunden 'StrUtils.dcu'"


Lasst mich raten die Unit gibt es in Delphi3 noch nicht.

citybreaker 19. Aug 2004 10:33

Re: ListView Items in einer TextDatei speichern
 
*schieb*

Batman666 17. Apr 2006 16:52

Re: ListView Items in einer TextDatei speichern
 
ich hät da auch das Problem das


PosEx, PrevPos, ActPos mein Delphi 5 nicht kennt!
Was kann ich als ersatz nehmen doer woher bekomme ich diese?

fkerber 17. Apr 2006 18:01

Re: ListView Items in einer TextDatei speichern
 
Hi!

PrevPos und ActPos sind integer-Variablen, die hast du sicherlich nur vergessen zu deklarieren.

Was PosEx angeht:
Such mal hier nach dem Begriff, ich glaube, die Funktion steht hier irgendwo rum.


Ciao Frederic


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz