Delphi-PRAXiS
Seite 3 von 6     123 45     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Rekursiv Suchen (https://www.delphipraxis.net/187222-rekursiv-suchen.html)

HolgerX 9. Nov 2015 17:25

AW: Rekursiv Suchen
 
Da Du anscheinend mein Post (#5) nicht willst...

.. zerlege ich deinen Code von Post #1

Delphi-Quellcode:
var f : integer;
    eingabe, Parameter : string;
    X : TSearchRec;
begin
  writeln('FRP to PDF');
  Writeln('');
  Writeln('Verzeichnis eingeben:');
  readln(eingabe);
  Parameter := 'PFAD';
  if eingabe = Parameter +'/dir' then
    begin
      Writeln(Parameter);
      if FindFirst(Parameter, faAnyFile, X) = 0 then try  // Hier fehlt ein an den Parameter angehängtes '*.*' oder direkt '*.FRP', notwendig, damit FindFirst auch nach Files sucht
    repeat
      FRPzuPDF(Parameter,ChangeFileExt(Parameter,'.pdf')); // Hier sollte eigentlich was mit x.Name gemacht werden, sprich dem gefundenen Dateiname. In Parameter steht ja nur ein Verzeichnis und kein Dateiname !!
    until FindNext(X) = 1; //Hier kommt immer ne' Endlosschleife   // Und wie schon mehrfach geschrieben '<> 0'
  finally
    FindClose(X);
    Writeln('Konvertierung erfolgreich');
    end;
end;
Deine Routine findet ein Verzeichnis, keine Datei!
Wenn deine Suche mit *.* gemacht würde, dann würde er Filenamen in X zurückgeben, sprich die Dateien, welche Du ja eigentlich konvertieren willst. Da Du diese aber nicht benutzt, passiert auch nichts.

Er spring bei <> 0 direkt wieder raus, da er ja das Verzeichnis schon gefunden hat und kein weiteres (gleiches) findet..

So, jetzt schaust Du DIr mal die Funktion in meinem Post #5 oder den Post von Sir Rufo #8 an, da ist genau das hier geschriebene gemacht worden..

baumina 10. Nov 2015 06:06

AW: Rekursiv Suchen
 
Mir leuchtet die if-Abfrage nicht ein, warum dann überhaupt eine Eingabe machen lassen, wenn es sowieso nur für das eine Verzeichnis gilt.

GroZ 10. Nov 2015 07:12

AW: Rekursiv Suchen
 
nene das ist nur zum testen ein festes Verzeichnis
Delphi-Quellcode:
var f : integer;
    eingabe, Parameter : string;
    SearchRec : TSearchRec;
begin
  writeln('FRP to PDF');
  Writeln('');
  Writeln('Verzeichnis eingeben:');
  readln(eingabe);
  Parameter := 'C:\Dokumente und Einstellungen\jgross\Desktop\TestSpeichern\'; //Für Testzwecke -> Später noch ändern
  if eingabe = Parameter +'/dir' then
    begin
      if FindFirst(Parameter+'*.*', faDirectory, SearchRec) = 0 then try
    repeat
      if (SearchRec.Name <> '.') then
        FRPzuPDF(Parameter,ChangeFileExt(Parameter,'.pdf'));
    until FindNext(SearchRec)<> 0; //Hier kommt immer ne' Endlosschleife
  finally
    FindClose(SearchRec);
    Writeln('Konvertierung erfolgreich');
    end;
end;
Im Debug Modus ist er genau 8x die Prozedur durchgegangen also hat sozusagen geklappt. Aber die Dateien wurden nicht konvertiert. Ich schau mir jetzt die Prozedur nochmal an. Diese geht aber eigentlich.
Ich glaube ich habe meinen Fehler gefunden. Die Prozedur möchte den genauen Namen zurück haben. Sie kriegt aber nur den Pfad ohne Dateinamen.

Zoot 10. Nov 2015 10:25

AW: Rekursiv Suchen
 
Ein erster Schritt wäre wirklich mal, die Antwortbeiträge zu lesen.

Delphi-Quellcode:
FRPzuPDF(Parameter,ChangeFileExt(x.Name,'.pdf'));
Könnte helfen.

Sir Rufo 10. Nov 2015 10:39

AW: Rekursiv Suchen
 
Zitat:

Zitat von Zoot (Beitrag 1320979)
Ein erster Schritt wäre wirklich mal, die Antwortbeiträge zu lesen.

Delphi-Quellcode:
FRPzuPDF(Parameter,ChangeFileExt(x.Name,'.pdf'));
Könnte helfen.

Nein, hilft so gar nicht ... denn im
Delphi-Quellcode:
TSearchRec.Name
steht der Dateiname ohne Pfadangabe :warn:

nuclearping 10. Nov 2015 12:52

AW: Rekursiv Suchen
 
Ich weiss, dass hier solche Vorschläge nicht gern gesehen sind. Aber vielleicht sollte der TE erstmal lernen, wie man 1) Code ordentlich einrückt, damit er leserlich ist und 2) den Debugger bedient, damit man sich nicht drei Seiten lang völlig lernresistent im Kreis bewegt und eine Copy & Paste-Lösung nach der anderen probiert und es immernoch nicht hinbekommt? Man man man ... :roll:

GroZ 10. Nov 2015 12:56

AW: Rekursiv Suchen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Habe mithilfe eines Arbeitskollegens das Programm komplett umgeschrieben:
Bekomme jetzt eine Exception... Hier der Code:
Delphi-Quellcode:
program FRPtoPDF;

uses
  Forms,
  SysUtils,
  Math,
  ShellApi,
  frxClass,
  frxExportPDF,
  FR_Class,
  PsFR_E_Main,
  PsFR_E_PDF,
  Graphics;

{$AppType Console}

function FRPzuPDF(AFRPFile, APDFFile : string): boolean;
var
  frReport : TfrReport;
  PDFExport : TPsfrPDFExport;
begin
  Result := false;
  if not FileExists(AFRPFile) then
    exit;

  if FileExists(APDFFile) then
    if not DeleteFile(APDFFile) then
      exit;

  frReport := TFrReport.Create(NIL);
  PDFExport := TPsfrPDFExport.Create(NIL);

  try
    PDFExport.ShowDialog := false;
    frReport.ShowProgress := false;
    try
      frReport.LoadPreparedReport(AFRPFile);
      frReport.ExportTo(PDFExport, APDFFile);
    except
      exit;
    end;

  finally
    PDFExport.Free;
    frReport.Free;
  end;

  Result := true;
end;


function VerzeichnisMitFRPzuPDF(PfadUndDateimaske: string; SubDirs: boolean): boolean;
var
  X : TSearchRec;
  Pfad: string;
begin
  Result:=false;

  if FindFirst(PfadUndDateimaske, faAnyFile, X) = 0 then
  try
    repeat
      Write(ExtractFilePath(PfadUndDateimaske)+X.Name+' --> '+ChangeFileExt(ExtractFilePath(PfadUndDateimaske)+X.Name,'.pdf')+'...');

      Result:=FRPzuPDF(ExtractFilePath(PfadUndDateimaske)+X.Name,ChangeFileExt(ExtractFilePath(PfadUndDateimaske)+X.Name,'.pdf'));

      if not Result then
      begin
        Writeln('Fehler!');
        break;
      end
      else
        Writeln('OK');
    until FindNext(X) <> 0;
  finally
    FindClose(X);
  end;

  if Result then
  begin
    if SubDirs then
    begin
      Pfad:=ExtractFilePath(PfadUndDateimaske);

      if FindFirst(Pfad+'*.*', faDirectory, X) = 0 then
      try
        repeat
          if (X.Name <> '.') and (X.Name <> '..') and ((X.Attr and faDirectory) <> 0) then
          begin
            Result:=VerzeichnisMitFRPzuPDF(ExtractFilePath(PfadUndDateimaske)+X.Name+'\'+ExtractFileName(PfadUndDateimaske),SubDirs);
            if not Result then
              break;
          end;
        until FindNext(X) <> 0;
      finally
        FindClose(X);
      end;
    end;
  end;
end;

var
  Parameter : string;
  SubDirs: boolean;
begin
  Writeln('FRP to PDF');

  if ParamCount<1 then
    exit;

  Parameter := ParamStr(1);
  if Copy(Parameter,Length(Parameter),1)<>'\' then
    Parameter:=Parameter+'\';

  if ExtractFileName(Parameter)='' then
    Parameter:=Parameter+'*.FRP';

  SubDirs:=(ParamCount>1) and (AnsiUpperCase(ParamStr(2))='/S'); // /S für SubDirectorys

  VerzeichnisMitFRPzuPDF(Parameter,SubDirs);
end.
Im Anhang ist die Exception...

TiGü 10. Nov 2015 13:03

AW: Rekursiv Suchen
 
Zitat:

Zitat von GroZ (Beitrag 1320999)
Habe mithilfe eines Arbeitskollegens das Programm komplett umgeschrieben:
Bekomme jetzt eine Exception... Hier der Code:

Was möchtest du jetzt von uns?
Frage doch deinen Arbeitskollegen.

Bitte beschäftige dich mit dem Debugger und wie man ihn verwendet!

Ansonsten gibt's noch andere schöne Lehrstellen im handwerklichen Bereich, wo man mehr mit den Händen arbeitet.
Kann auch sehr schön sein!

GroZ 10. Nov 2015 13:06

AW: Rekursiv Suchen
 
Ich würde gerne wisssen wie ich die Exception löse. Mein Arbeitskollege ist auch überfragt...
Die Exception tritt auf wenn er in ein Unterverzeichnis möchte...

haentschman 10. Nov 2015 13:08

AW: Rekursiv Suchen
 
Welche Zeile / Anweisung? Wie sind die Werte der Parameter? An welchem Datum ist Weihnachten? :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:44 Uhr.
Seite 3 von 6     123 45     Letzte »    

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