Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Gefilterte Dateien / StringGrid/ XML (https://www.delphipraxis.net/189545-gefilterte-dateien-stringgrid-xml.html)

Freyr77 23. Jun 2016 09:10

Delphi-Version: 5

Gefilterte Dateien / StringGrid/ XML
 
Moin, ich schon wieder.

Diesmal geht es darum, dass ich grob gesagt aus XML-Dokumenten die Versionsnummern anzeigen lassen soll. In einem StringGrid.

Hier soll das Programm ausschließlich .dproj-Endungen berücksichtigen. Man muss einen Ordner mit Unterordnern öffnen, die alle jeweils eine .dproj Datei enthalten. Diese müssen im Grid aufgelistet werden und nebenan Automatisch die richtigen Versionsnummern ausgeben.

Die konkrete Frage dazu wäre:

Wie mache ich das, dass man einen Ordner auswählt und nur die enthaltenen dprojs angezeigt werden (im StringGrid)?

p80286 23. Jun 2016 10:11

AW: Gefilterte Dateien / StringGrid/ XML
 
Zitat:

Zitat von Freyr77 (Beitrag 1340854)
... dass ich grob gesagt aus XML-Dokumenten die Versionsnummern anzeigen lassen soll.

Zitat:

Zitat von Freyr77 (Beitrag 1340854)
Hier soll das Programm ausschließlich .dproj-Endungen berücksichtigen. Man muss einen Ordner mit Unterordnern öffnen, die alle jeweils eine .dproj Datei enthalten. Diese müssen im Grid aufgelistet werden und nebenan Automatisch die richtigen Versionsnummern ausgeben.

Versionsnummern von was? .XML .dproj oder vllt. doch etwas ganz anderes?

Zitat:

Zitat von Freyr77 (Beitrag 1340854)
Wie mache ich das, dass man einen Ordner auswählt und nur die enthaltenen dprojs angezeigt werden (im StringGrid)?

Doch keine Versions-Nummer?

Mit Findfirst/FindNext solltest Du ans Ziel kommen. Hier geistern jede Menge Beispiele herum, da sollte auch etwas für Dich dabei sein.

Gruß
K-H

DrTosh 23. Jun 2016 10:14

AW: Gefilterte Dateien / StringGrid/ XML
 
Ich habe mir dafuer eine Funktion geschrieben:

Code:
function fGetFiles(lDir: String; lMask: String; var lFileList: TStringList): Boolean;
var
  lSR: TSearchRec;
begin
  Result := false;
  if not DirectoryExists(lDir) then
    Raise Exception.Create(lDir + ' not exists!')
  else begin
    if not Assigned(lFileList) then
      Raise Exception.Create('You have to Assign your Stringlist for "fGetFiles"');
    try
      if FindFirst(IncludeTrailingPathDelimiter(lDir) + lMask, faAnyFile, lSR) = 0 then
      begin
        repeat
          if (lSR.Attr <> faDirectory) then
          begin
            Result := true;
            lFileList.Add(lSR.Name);
          end;
        until FindNext(lSR) <> 0;
        SysUtils.FindClose(lSR);
      end;
    finally
    end;
  end;
end;
Und hier der Aufruf:
Code:
procedure TIrgendwas.DoIt;
var
  lStringList: TStringList;
  lRun: Integer;
begin
  lStringList := TStringList.Create;
  try
    fGetFiles('C:\...', '*.dproj', lStringlist);
    for lRun := 0 to lStringList.Count - 1 do
    begin
      // Hier kommt dann deine Eintragung in die Stringlist rein, das kriegst du mit sicherheit selber hin ;)
      showMessage(lStringList[lRun]); // anstelle von diesem hier
    end;
  finally
    lStringList.Free;
  end;
end;
MfG DrTosh

Freyr77 23. Jun 2016 10:37

AW: Gefilterte Dateien / StringGrid/ XML
 
Zitat:

Zitat von p80286 (Beitrag 1340868)
Zitat:

Zitat von Freyr77 (Beitrag 1340854)
... dass ich grob gesagt aus XML-Dokumenten die Versionsnummern anzeigen lassen soll.

Zitat:

Zitat von Freyr77 (Beitrag 1340854)
Hier soll das Programm ausschließlich .dproj-Endungen berücksichtigen. Man muss einen Ordner mit Unterordnern öffnen, die alle jeweils eine .dproj Datei enthalten. Diese müssen im Grid aufgelistet werden und nebenan Automatisch die richtigen Versionsnummern ausgeben.

Versionsnummern von was? .XML .dproj oder vllt. doch etwas ganz anderes?


Zitat:

Zitat von Freyr77 (Beitrag 1340854)
Wie mache ich das, dass man einen Ordner auswählt und nur die enthaltenen dprojs angezeigt werden (im StringGrid)?

Doch keine Versions-Nummer?

Mit Findfirst/FindNext solltest Du ans Ziel kommen. Hier geistern jede Menge Beispiele herum, da sollte auch etwas für Dich dabei sein.

Gruß
K-H

Versionsnummer aus der dproj.Gut, schau ich mir mal an! Danke.

Freyr77 23. Jun 2016 10:43

AW: Gefilterte Dateien / StringGrid/ XML
 
Zitat:

Zitat von DrTosh (Beitrag 1340869)
Ich habe mir dafuer eine Funktion geschrieben:

Code:
function fGetFiles(lDir: String; lMask: String; var lFileList: TStringList): Boolean;
var
  lSR: TSearchRec;
begin
  Result := false;
  if not DirectoryExists(lDir) then
    Raise Exception.Create(lDir + ' not exists!')
  else begin
    if not Assigned(lFileList) then
      Raise Exception.Create('You have to Assign your Stringlist for "fGetFiles"');
    try
      if FindFirst(IncludeTrailingPathDelimiter(lDir) + lMask, faAnyFile, lSR) = 0 then
      begin
        repeat
          if (lSR.Attr <> faDirectory) then
          begin
            Result := true;
            lFileList.Add(lSR.Name);
          end;
        until FindNext(lSR) <> 0;
        SysUtils.FindClose(lSR);
      end;
    finally
    end;
  end;
end;
Und hier der Aufruf:
Code:
procedure TIrgendwas.DoIt;
var
  lStringList: TStringList;
  lRun: Integer;
begin
  lStringList := TStringList.Create;
  try
    fGetFiles('C:\...', '*.dproj', lStringlist);
    for lRun := 0 to lStringList.Count - 1 do
    begin
      // Hier kommt dann deine Eintragung in die Stringlist rein, das kriegst du mit sicherheit selber hin ;)
      showMessage(lStringList[lRun]); // anstelle von diesem hier
    end;
  finally
    lStringList.Free;
  end;
end;
MfG DrTosh

Wunderbar, Danke! :thumb:

Freyr77 13. Jul 2016 09:49

AW: Gefilterte Dateien / StringGrid/ XML
 
Nächtes Problem in der Sache:

Ich habe folgendes geschrieben um das XML-Dokument aufzurufen:

Delphi-Quellcode:
Procedure Irgendwas.FormCreate(Sender: TObject);
begin
  CurrentXML := NewXMLDocument;
  CurrentXML := CurrentXML.LoadFromFile('irgendwas.xml');
  CurrentXML.Active := true;
end;
Der Fehler tritt bei LoadFromFile auf, da sagt der Compiler - Inkompatible Typen: IXMLDocument und procedure, untyped pointer or untyped paramter -
Was möchte er von mir, der Parameter ist laut Funktion "AFileName - System String".

Zweite Frage wäre:

Die auszulesende XML-Datei befindet sich in einer .dproj. Geht das trotzdem über die dproj zum auslesen, wenn ich den Pfad dazu öffnen lasse?

Danke.

samso 13. Jul 2016 10:01

AW: Gefilterte Dateien / StringGrid/ XML
 
Muss es nicht so sein?
Delphi-Quellcode:
Procedure Irgendwas.FormCreate(Sender: TObject);
begin
  CurrentXML := NewXMLDocument;
  CurrentXML.LoadFromFile('irgendwas.xml');
  CurrentXML.Active := true;
end;

Freyr77 13. Jul 2016 10:20

AW: Gefilterte Dateien / StringGrid/ XML
 
Oh weh, oh weh.... Danke dir, hast recht! :thumb:

himitsu 13. Jul 2016 15:45

AW: Gefilterte Dateien / StringGrid/ XML
 
Und es gibt mehrere Implementationen des Interfaces "IXMLDocument", die zwar alle "gleich" sind, aber für den Compiler eben nicht "identisch".
Da kann man mit der Reihenfolge der Units im Uses spielen, oder durch Angabe des Namespaces bei der Typenverwendung, wenn es dort mal knallt, weil man mehrere Units eingebunden hat und der Typ so mehrfach vorhanden ist.

Freyr77 14. Jul 2016 14:32

AW: Gefilterte Dateien / StringGrid/ XML
 
Bei SelectNodes habe ich das Problem, dass ja immer ein String zum Abrufen gefordert wird.

Delphi-Quellcode:
begin
    DOMNodeList := DomNodeSelect.selectNodes('blabla/blabla2/blabla3/text()');
So zum Beispiel...

blabla wäre in meinem Fall:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

blabla2:

<PropertyGroup>

blabla3:

<PropertyGroup Condition="'$(Base)'!=''"> <---- Hier liegt das Problem

blabla4:

<VerInfo_Keys>

Hier sind Zeichen enthalten mit denen der Compiler nicht klar kommt. Ich kann/darf die Struktur aber leider auch nicht verändern.

Jemand einen Lösungsvorschlag?


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:34 Uhr.
Seite 1 von 2  1 2      

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