Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - For Next Schleife funktioniert nicht richtig [done]
cromos - Sa 23.08.03 16:42
Titel: For Next Schleife funktioniert nicht richtig [done]
Hallo.
ich möchte den Inhalt eines ListView in einer CSV-Datei schreiben, damit Exel diese Lesen kann.
mit:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| index:=ListView1.Items.Count - 1; For il := 0 to Index do begin TestStr := ListView1.Items.Item[il].Caption + ';' + Listview1.Items.Item[il].SubItems[0] + ';' + Listview1.Items.Item[il].SubItems[1] + ';' + Listview1.Items.Item[il].SubItems[2] + ';' + Listview1.Items.Item[il].SubItems[3] + ';' + Listview1.Items.Item[il].SubItems[4]; SaveStringToFile(ProgrammOrdner + 'test.csv', Teststr); label6.Caption := TestStr; index := Index +1; end; |
schreibt er immer nur den letzten Eintrag rein.
Wo ist der Fehler?
Moderiert von
Tino: Titel geändert; Delphi-Tags hinzugefügt.
MSCH - Sa 23.08.03 17:07
Titel: Re: For??
| cromos hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4:
| index:=ListView1.Items.Count - 1; --> For il := 0 to Index do --> index := Index +1; wech damit !! end; | |
anders:
Delphi-Quelltext
1: 2: 3: 4: 5:
| asignFile(F,'Test.csv'); For il := 0 to istView1.Items.Count - 1 do begin writeln(F,...,...,....,); end; Closefile(F); |
1. schau dir mal dein code an !
2. siehe die Ergänzung
grez
msch
Moderiert von
Tino: Delphi-Tags hinzugefügt.
cromos - Sa 23.08.03 19:15
Keine Ahnung was Du meinst. Werde nicht wirklich schlau daraus.
Was soll denn da anders ein?
Was meinst du mit
| Zitat: |
writeln(F,...,...,....,);
|
Was kommt da hin?
Als was wird F Deklariert? In der OH steht das es String sein muss.
Bekomme aber ein Fehler "Inkompatible Datentypen"
:?:
MSCH - Sa 23.08.03 20:01
erstens erhöhst du die ForSchleifenendbedingung "Index" innerhalb der Schleife. Zweitens sicherst du nur einen String "Teststring" via unbekannter Procedure SaveStringToFile(). Imho überschreibst du damit immer den vorhergehenden Satz und behälst somit nur den letzten.
F ist eine Textvariable
Writeln (F, ...,..,..) sollte andeuten, dass du via WriteLn in die Textdatei anfügst und zwar den Text (....). also
writeln(F,ListView.Item.Caption,';',ListView.Item.SubItem[1]..u.s.w.).
ok?
grez
msch
cromos - So 24.08.03 12:04
Also,
danach sollte es so richtig sein???!!!
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| var TestStr : String; var F : TextFile; var il : integer; begin ProgrammOrdner:=ExtractFilePath(application.ExeName); TestStr := ListView1.Items.Item[il].Caption + ';' + Listview1.Items.Item[il].SubItems[0] + ';' + Listview1.Items.Item[il].SubItems[1] + ';' + Listview1.Items.Item[il].SubItems[2] + ';' + Listview1.Items.Item[il].SubItems[3] + ';' + Listview1.Items.Item[il].SubItems[4];
assignFile(F,ProgrammOrdner + 'Test.csv'); For il := 0 to ListView1.Items.Count - 1 do begin writeln(F,TestStr); end; Closefile(F); end; |
Tut aber nicht. Ausser
Exception
:?:
Moderiert von
Tino: Delphi-Tags hinzugefügt.
Tryer - So 24.08.03 12:13
Vielleicht solltest Du "il" initialisieren.
Ansonsten ist die Aussage "nix ausser Exception" etwas schwach, es gibt nämlich mehr als eine ;)
MfG,
Tryer
cromos - So 24.08.03 12:15
Wenn ich es so mache:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| writeln(F,ListView1.Items.Item[il].Caption,';', Listview1.Items.Item[il].SubItems[0],';', Listview1.Items.Item[il].SubItems[1],';', Listview1.Items.Item[il].SubItems[2],';', Listview1.Items.Item[il].SubItems[3],';', Listview1.Items.Item[il].SubItems[4] ); |
bekomme ich auch ein Exception. E/A Fehler 103 oder sowas in der Art.
Wieso?
Moderiert von
Tino: Delphi-Tags hinzugefügt.
MSCH - So 24.08.03 12:16
es fehlt Rewrite(F) bzw. Append(F)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| var TestStr : String; var F : TextFile; var il : integer; begin ProgrammOrdner:=ExtractFilePath(application.ExeName); assignFile(F,ProgrammOrdner + 'Test.csv'); rewrite(F); For il := 0 to ListView1.Items.Count - 1 do begin TestStr := ListView1.Items.Item[il].Caption + ';' + Listview1.Items.Item [il].SubItems[0] + ';' + Listview1.Items.Item[il].SubItems[1] + ';' + Listview1.Items.Item[il].SubItems[2] + ';' + Listview1.Items.Item[il].SubItems[3] + ';' + Listview1.Items.Item[il].SubItems[4]; writeln(F,TestStr); end; Closefile(F); end; |
grez
msch
cromos - So 24.08.03 12:18
| Zitat: |
Vielleicht solltest Du "il" initialisieren.
|
Was meinst Du damit?
cromos - So 24.08.03 12:22
Titel: Es hat Funktioniert
Ja, so klappt das ganze.
Also lag es nur an
Vielen Dank für die Hilfe.
Gruss
Cromos
kat1 - Mo 25.08.03 18:54
Ich wäre aber vorsichtig mit der Verwendung von ReWrite. Existiert das File schon, wird es einfach gelöscht, ohne dass Du eine Warnung erhältst, und überschrieben.
Vielleicht solltest Du noch eine Abfrage einbauen:
Delphi-Quelltext
1: 2:
| if FileExists('test.csv') then .... |
und dort eine Fehlermeldung produzieren.
cromos - Di 26.08.03 00:21
| Zitat: |
Ich wäre aber vorsichtig mit der Verwendung von ReWrite. Existiert das File schon, wird es einfach gelöscht, ohne dass Du eine Warnung erhältst, und überschrieben.
|
Ist in diesem Fall egal. Ich gehe ja über einen FileSave Dialog.
Gruss
Cromos
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!