Autor |
Beitrag |
vicky12
Hält's aus hier
Beiträge: 8
|
Verfasst: So 13.02.11 18:04
hallo,
in einer textdatei sind daten in jeder zeile mit ";" getrennt,
das ganze geht über mehrere zeilen. z.b:
Max;Muster;23.06.1964
Lisa;Laut;02.12.1968 .. usw.
ich möchte nun in einem listview das gesamte file ausgeben.
sollte so aussehen:
Name | Vorname | Geb.
Muster | Max | 23.06.1964
Laut | Lisa | 02.12.1968
mit textfiles habe ich schon gearbeitet, aber nur mit normalen readln()-befehlen,
also immer nur zeile für zeile ohne jegliche trennzeichen auslesen.
wäre super, wenn mir dabei jemand weiter helfen könnte.
|
|
Peter Schmelzer
Hält's aus hier
Beiträge: 16
BDS 2006 Enterprice, XE Enterprice
|
Verfasst: So 13.02.11 18:18
Listview1.Items.LoadfromFile(Textfile);
mit Ersetzung des Semikolon:
Listview1.Items.LoadfromFile(Textfile);
ListView1.Items.Text := StringReplace(ListView1.Items.Text, ';', ' | ', [rfReplaceAll]);
Zuletzt bearbeitet von Peter Schmelzer am So 13.02.11 18:39, insgesamt 1-mal bearbeitet
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: So 13.02.11 18:24
ich weiß ja nicht welches delphi du hast aber bei delphi 7 hat TListview noch keine eigenschaft 'LoadFromFile'.
Mein Vorschlag: Du schreibst dir eine eigene Methode. Am elegantesten natürlich wenn du das in eine Komponente fasst die du vom TListView ableitest.
Dieser Methode übergibst du dann den Pfad zum TextFile. Dann öffnest du das Textfile, kann auch mit ReadLn() sein, oder halt wenn du es anders machen willst mit einer StringList. Dann gehst du dein Dokument Zeilenweise durch (bei ReadLn() gehts eh nicht anders) und filterst immer die wörter zwischen den semikolons raus. Das könntest du ev. durch Copy und PosEx() machen. Dadurch bekommst du die einzelnen Texte zwischen den Semikolons und das einzige was du dann noch machen musst ist diese dann in dein ListView einzufügen.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Peter Schmelzer
Hält's aus hier
Beiträge: 16
BDS 2006 Enterprice, XE Enterprice
|
Verfasst: So 13.02.11 18:32
Listview1.Items.LoadfromFile(Textfile);
Seit Delphi 1 dabei!
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: So 13.02.11 18:44
-.- Wortklauberei, ich meinte natürlich bei den Items...
Aber auch dort ist bei mir in Delphi7 keine Methode mit dem Namen "LoadFromFile" dabei (siehe anhang). Sicher das du die richtige Komponente meinst?
lg elundril
Einloggen, um Attachments anzusehen!
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 13.02.11 18:45
Für diesen Beitrag haben gedankt: bummi
|
|
Peter Schmelzer
Hält's aus hier
Beiträge: 16
BDS 2006 Enterprice, XE Enterprice
|
Verfasst: So 13.02.11 18:51
Stimmt,
Listview und ListBox sind verschiedene Dinge.
Dann ist's nicht ganz so trivial.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 13.02.11 20:19
Lustig, gerade heute Nacht geschrieben:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56:
| procedure TfrmMain.FillListview; var i: Integer; j: Integer; sl: TStringList; StartIdx: Integer; DelimitedLine: TStringList; LVItem: TListItem; begin try FCancel := False; UpdateStatus('Lese Datei... Abbrechen mit ESC'); lvCSVFile.Items.Clear; sl := TStringList.Create; try DelimitedLine := TStringlist.Create; Delimitedline.StrictDelimiter := True; DelimitedLine.Delimiter := FDelimiter; try sl.LoadFromFile(FFilename); ProgressBar1.Max := sl.Count; Application.ProcessMessages; if chKHasColumnNames.Checked then StartIdx := 1 else StartIdx := 0; for i := StartIdx to sl.Count - 1 do begin if FCancel then Break; DelimitedLine.DelimitedText := sl[i]; LVItem := lvCSVFile.Items.Add; LVItem.Caption := IntToStr(i); FCountRecords := i; UpdateStatusbar; for j := 0 to DelimitedLine.Count - 1 do begin LVitem.SubItems.Add(DelimitedLine[j]); end; ProgressBar1.StepIt; Application.ProcessMessages; end; finally DelimitedLine.Free; end; finally sl.Free; end; Progressbar1.Position := 0; FColumnToSort := 0; lvCSVFile.AlphaSort; UpdateStatus('Datei gelesen'); except raise Exception.Create('Fehler beim Lesen der Datei'); end; end; |
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 13.02.11 21:04
Als Class Helper eingebaut in die ListView finde ich es allerdings schöner.
Was da nicht geht, ist konzeptbedingt die Fortschrittsanzeige, allerdings ist die an der Stelle ohnehin fragwürdig finde ich. Denn entweder ist die Datei so klein, dass die sich nicht lohnt oder eine TListView fehl am Platz, weil die für größere Datenmengen viel zu langsam ist. 
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 13.02.11 21:13
Sind 80 Zeilen à 26 Felder. Dauert so seine zwei, drei Sekunden. Rechnen tue ich mit maximal 150 Zeilen oder so. War auch nur so für mich privat mal schnell zusammengekloppt. Ist nur um die Backup Exporte meiner privaten Adressdatenbank im Notfall auch mal gescheit angucken zu können, wenn ich keine Verbindung zum Internet habe.
|
|
vicky12 
Hält's aus hier
Beiträge: 8
|
Verfasst: So 13.02.11 22:36
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 13.02.11 22:57
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 13.02.11 23:00
elundril hat folgendes geschrieben : | Das könntest du ev. durch Copy und PosEx() machen. |
Warum so umständlich. Lass es doch die VCL machen. TStringList.Delimiter und TStringList.DelimitedText, siehe meinen Code. Tipp: damit er nur den angegeben Delimiter berücksichtigt und keine Leerzeichen muss die Eigenschaft StrictDelimiter auf True gesetzt werden.
|
|