AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi ListView - mit Dateien füllen und auf Inhalt prüfen
Thema durchsuchen
Ansicht
Themen-Optionen

ListView - mit Dateien füllen und auf Inhalt prüfen

Ein Thema von atgis · begonnen am 4. Sep 2007 · letzter Beitrag vom 7. Sep 2007
Antwort Antwort
Seite 1 von 3  1 23      
atgis
(Gast)

n/a Beiträge
 
#1

ListView - mit Dateien füllen und auf Inhalt prüfen

  Alt 4. Sep 2007, 16:58
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:
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;
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...
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: ListView - mit Dateien füllen und auf Inhalt prüfen

  Alt 4. Sep 2007, 16:59
Versuch doch mal, die Dateigröße abzufragen und auf 0 zu prüfen
  Mit Zitat antworten Zitat
atgis
(Gast)

n/a Beiträge
 
#3

Re: ListView - mit Dateien füllen und auf Inhalt prüfen

  Alt 4. Sep 2007, 17:08
Ja das hab ich mir auch schon überlegt...aber das Searchrec.name ist immer nur der letzte Datei Name

http://img266.imageshack.us/img266/5...nnt1bs2.th.jpg
 StatusBar1.Panels[2].Text:=ChangeFileExt(ExtractFileName(ParamStr(0)),''); Unten rechts in der Statusbar wird das Searchrec ausgegeben...

Kann mir bitte jemand helfen?!
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#4

Re: ListView - mit Dateien füllen und auf Inhalt prüfen

  Alt 4. Sep 2007, 17:33
Und wo ist das Problem?

Du überprüfst dass doch in einer Schleife.
".size" sollte dir die Größe zurückgeben.
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
atgis
(Gast)

n/a Beiträge
 
#5

Re: ListView - mit Dateien füllen und auf Inhalt prüfen

  Alt 4. Sep 2007, 17:57
Ok Danke! Hat geklappt...ich wusste das mit "size" nicht...
Delphi-Quellcode:
if SearchRec.size = 0 then
//Add Items
So und nun soll bei Doppelklick auf die Datei, der Inhalt in einem StringGrid in einem neuen Formular dargestellt werden...

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...
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: ListView - mit Dateien füllen und auf Inhalt prüfen

  Alt 4. Sep 2007, 18:05
Moin atgis,

ich habe da noch einen kleinen Fehler in Deiner Routine gefunden:

if searchrec.name[1] <> '.then sollte besser

if (searchrec.name <> '.') and (searchrec.name <> '..') then lauten.

. 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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
atgis
(Gast)

n/a Beiträge
 
#7

Re: ListView - mit Dateien füllen und auf Inhalt prüfen

  Alt 4. Sep 2007, 19:55
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:
//Inhalt in StringGrid laden
procedure TForm1.ListView1DblClick(Sender: TObject);
begin
try form3.show;
 except ShowMessage('Keine Datei gewählt');
end;
end;
So öffne ich die TXT's im StringGrid:
Delphi-Quellcode:
//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;
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!

Ich dachte es funktioniert mit den gerade ausgewählten "Symbolnamen":
Form1.ListView1.Selected.Caption aber geht auch nicht!

Wie kann ich den jeweiligen Namen herausfinden?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: ListView - mit Dateien füllen und auf Inhalt prüfen

  Alt 4. Sep 2007, 20:15
Form1.ListView1.Items[Form1.ListView1.Selected].Caption;
Markus Kinzler
  Mit Zitat antworten Zitat
atgis
(Gast)

n/a Beiträge
 
#9

Re: ListView - mit Dateien füllen und auf Inhalt prüfen

  Alt 4. Sep 2007, 20:29
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;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: ListView - mit Dateien füllen und auf Inhalt prüfen

  Alt 4. Sep 2007, 20:37
.Selected ist ja schon ein TListItem.
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:09 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