![]() |
ListView - mit Dateien füllen und auf Inhalt prüfen
Hi,
Also ich hab hier ein Problem. Undzwar will ich im Programm einen Ordner (Pfad) angeben. Der Inhalt des Ordners sind TXT-Dateien...die sollen nun in das ListView geladen werden. Soweit so gut. Das funktioniert schonmal...
Delphi-Quellcode:
Aber mein Problem ist nun: TXT's mit einem Inhalt sollen ein PC-Symbol erhalten, leere TXT's ein anderes Symbol...Aber wie finde ich heraus ob die Datei leer ist? Ich hab im Quelltext die Stelle markiert, wo die Abfrage stehen sollte...
procedure TForm1.ReadDir(WorkingDir: String);
var SearchRec : TSearchRec; procedure DoSomeThing(SearchRec : TSearchRec); var ListItem: TListItem; begin if FileExists(WorkingDir +SearchRec.name) then //Hier soll geprüft werden ob die TXT Datei Leer ist oder nicht... //PC'S begin ListItem:= ListView1.Items.Add; ListItem.Caption:=ChangeFileExt(searchrec.name,''); ListItem.ImageIndex:= 1; end else //leere Dateien begin ListItem:= ListView1.Items.Add; ListItem.Caption:=searchrec.name; ListItem.ImageIndex:= 0; end; end; begin if WorkingDir[length(WorkingDir)] <> '\' then WorkingDir := WorkingDir + '\'; if findfirst(WorkingDir + '*.*', faanyfile, SearchRec) = 0 then repeat if searchrec.name[1] <> '.' then begin StatusBar1.Panels[3].text := WorkingDir + searchrec.Name; if ((searchrec.attr and fadirectory) <> fadirectory) then begin if fileexists(WorkingDir + searchrec.name) then begin DoSomeThing(SearchRec); end else begin showmessage('Datei ' + WorkingDir + SearchRec.Name + ' konnte nicht gelesen werden'); end; end else if cbRekursiv.Checked then ReadDir(WorkingDir + searchrec.name); end; until (findnext(searchrec) <> 0) or Application.Terminated; findclose(searchrec); end; //Menü Form2 öffnen zum Pfad eingeben procedure TForm1.Verzeichnis1Click(Sender: TObject); var workingdir: string; begin if form2.ShowModal = mrOk then begin Workingdir:=form2.edPfad.text; ReadDir(workingdir); end else end; |
Re: ListView - mit Dateien füllen und auf Inhalt prüfen
Versuch doch mal, die Dateigröße abzufragen und auf 0 zu prüfen ;)
|
Re: ListView - mit Dateien füllen und auf Inhalt prüfen
Ja das hab ich mir auch schon überlegt...aber das Searchrec.name ist immer nur der letzte Datei Name :?
![]() ![]()
Delphi-Quellcode:
Unten rechts in der Statusbar wird das Searchrec ausgegeben...
StatusBar1.Panels[2].Text:=ChangeFileExt(ExtractFileName(ParamStr(0)),'');
Kann mir bitte jemand helfen?! |
Re: ListView - mit Dateien füllen und auf Inhalt prüfen
Und wo ist das Problem?
Du überprüfst dass doch in einer Schleife. ".size" sollte dir die Größe zurückgeben. |
Re: ListView - mit Dateien füllen und auf Inhalt prüfen
Ok Danke! Hat geklappt...ich wusste das mit "size" nicht...
Delphi-Quellcode:
So und nun soll bei Doppelklick auf die Datei, der Inhalt in einem StringGrid in einem neuen Formular dargestellt werden...
if SearchRec.size = 0 then
//Add Items Meine Überlegung wäre, dass man im Hauptprogramm erstmal die Form nur aufruft. Dann wird der Pfad der Datei aus dem Hauptprog geholt und der Inhalt im StringGrid geladen... |
Re: ListView - mit Dateien füllen und auf Inhalt prüfen
Moin atgis,
ich habe da noch einen kleinen Fehler in Deiner Routine gefunden:
Delphi-Quellcode:
sollte besser
if searchrec.name[1] <> '.' then
Delphi-Quellcode:
lauten.
if (searchrec.name <> '.') and (searchrec.name <> '..') then
. und .. sind spezielle Verzeichnisnamen, aber das Dateisystem erlaubt es, dass Dateien und Verzeichnisse mit einem Punkt anfangen, so dass mit Deiner Abfrage nicht nur die beiden Verzeichnisse ausgefiltert werden. |
Re: ListView - mit Dateien füllen und auf Inhalt prüfen
Danke!
Also nun zu der 2. Sache. Den Inhalt der TXT's ins StringGrid bekommen! So rufe ich vom Hauptformular das neue Formular mit den StringGrid auf:
Delphi-Quellcode:
So öffne ich die TXT's im StringGrid:
//Inhalt in StringGrid laden
procedure TForm1.ListView1DblClick(Sender: TObject); begin try form3.show; except ShowMessage('Keine Datei gewählt'); end; end;
Delphi-Quellcode:
Doch leider funzt es nicht so wie es soll. Ich will ja wenn ich auf ein Symbol z.b. mit den Namen LT-13-7-1 klicke...die TXT LT-13-7-1.txt im StringGrid angezeigt bekommen!
//TxT Datei öffnen
procedure TForm3.FormCreate(Sender: TObject); var Datei: Textfile; ZeileIndex, SpalteIndex: integer; Zeile: string; begin //Datei Lesen ShowMessage(ExtractFilePath(ParamStr(0))+'DATEN\'); assignfile(Datei, ExtractFilePath(ParamStr(0))+'DATEN\'+Form1.ListView1.Selected.Caption+'.txt'); reset(Datei); ZeileIndex:=0; while not EoF(Datei) do begin readln(Datei, Zeile); SpalteIndex:=0; while pos(chr(9), Zeile) <> 0 do begin sgInhalt.Cells[SpalteIndex, ZeileIndex]:=copy(Zeile ,1 ,pos(chr(9), Zeile)-1); delete(Zeile, 1, pos(chr(9), Zeile)); inc(SpalteIndex); end; sgInhalt.Cells[SpalteIndex, ZeileIndex]:=Zeile; inc(ZeileIndex); //Tabelle automatisch um 1 Zeile erhöhen sgInhalt.RowCount:=sgInhalt.RowCount+1; end; CloseFile(Datei); //letzte Zeile ist zuviel -> überstehende Zeile Löschen sgInhalt.RowCount:=sgInhalt.RowCount-1; end; Ich dachte es funktioniert mit den gerade ausgewählten "Symbolnamen":
Delphi-Quellcode:
aber geht auch nicht!
Form1.ListView1.Selected.Caption
Wie kann ich den jeweiligen Namen herausfinden? |
Re: ListView - mit Dateien füllen und auf Inhalt prüfen
Delphi-Quellcode:
Form1.ListView1.Items[Form1.ListView1.Selected].Caption;
|
Re: ListView - mit Dateien füllen und auf Inhalt prüfen
Geht leider nicht: Inkompatible Typen Integer und TListItem! :(
Delphi-Quellcode:
//TxT Datei öffnen
procedure TForm3.FormCreate(Sender: TObject); var Datei: Textfile; ZeileIndex, SpalteIndex: integer; Zeile: string; begin //ShowMessage(ExtractFilePath(ParamStr(0))+'DATEN\'); assignfile(Datei, ExtractFilePath(ParamStr(0))+'DATEN\'+Form1.ListView1.Items[Form1.ListView1.Selected].Caption); reset(Datei); ZeileIndex:=0; while not EoF(Datei) do begin readln(Datei, Zeile); SpalteIndex:=0; while pos(chr(9), Zeile) <> 0 do begin sgInhalt.Cells[SpalteIndex, ZeileIndex]:=copy(Zeile ,1 ,pos(chr(9), Zeile)-1); delete(Zeile, 1, pos(chr(9), Zeile)); inc(SpalteIndex); end; sgInhalt.Cells[SpalteIndex, ZeileIndex]:=Zeile; inc(ZeileIndex); //Tabelle automatisch um 1 Zeile erhöhen sgInhalt.RowCount:=sgInhalt.RowCount+1; end; CloseFile(Datei); //letzte Zeile ist zuviel -> überstehende Zeile Löschen sgInhalt.RowCount:=sgInhalt.RowCount-1; end; |
Re: ListView - mit Dateien füllen und auf Inhalt prüfen
.Selected ist ja schon ein TListItem.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz