Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Overview über Ordnerinhalt in HTML-Datei schreiben (https://www.delphipraxis.net/91271-overview-ueber-ordnerinhalt-html-datei-schreiben.html)

Svenkan 2. Mai 2007 16:24


Overview über Ordnerinhalt in HTML-Datei schreiben
 
Auf einer anderen Seite habe ich bereits den Tipp mit Verweis auf 'http://www.dsdt.info/tipps/?id=134' bekommen.
Mit dieser rekursiven Suche möchte ich zunächst alle HTM-Dateien im Ordner bestimmen. Für jede dieser Dateien soll dann ein Code geschrieben werden.
Ich habe bisher so weit umgeschrieben:

Delphi-Quellcode:
procedure ScanDir(const Directory: String);
var
  SR: TSearchRec;
begin
  if FindFirst(Directory + Mask, faAnyFile and not faDirectory, SR) = 0 then try
    repeat
    if NOT (SR.Name = 'overview.htm') then List.Add(SR.Name);
    until FindNext(SR) <> 0;
  finally
    FindClose(SR);
  end;

  if WithSubDirs then begin
    if FindFirst(Directory + '*.*', faAnyFile, SR) = 0 then try
      repeat
        if ((SR.attr and faDirectory) = faDirectory) and
           (SR.Name <> '.') and (SR.Name <> '..') then
          ScanDir(Directory + SR.Name + '\');
      until FindNext(SR) <> 0;
    finally
      FindClose(SR);
    end;
  end;
end;

begin
  List.BeginUpdate;
  try
    if ClearList then
      List.Clear;
    if Directory = '' then Exit;
    if Directory[Length(Directory)] <> '\' then
      Directory := Directory + '\';
    ScanDir(Directory);
  finally
    List.EndUpdate;
  end;
end;
Abruf über Button:

Delphi-Quellcode:
procedure TForm1.BtWriteOverviewClick(Sender: TObject);
var path,s,anfang,ende,hcode: String;
    Datei: TextFile;
    count: Integer;
begin
  path:=ExtractFilePath(ParamStr(0))+'.\splaene';
  GetFilesInDirectory(path, '*.htm*', LbOverview.Items, False, True);
  LbOverview.Visible:=True;

  FOR count := 0 TO LbOverview.Items.Count-1 DO
  hcode:='<td align="center">'+sLineBreak+'<p align="center">[url="'+LbOverview.Items[count]+'"]'+LbOverview.Items[count]+'[/url]</td>';

  AssignFile(Datei, (ExtractFilePath(ParamStr(0))+'.\splaene\overview.htm'));
  Rewrite(Datei);                  // Datei neu schreiben
  anfang:='<table border="1" width="23%" style="border-collapse: collapse" bordercolorlight="#000000" bordercolordark="#000000">'+SLineBreak+'<tr>';
  ende:='</tr>'+SLineBreak+'</table>';
  s:=anfang+String(hcode)+ende;
  Write(Datei,s);                  // Datei schreiben
  CloseFile(Datei);                // Datei schließen
end;
Nun soll zu den Einträgen in der Listbox jeweils ein HTML-Code in der Form
Code:
<td align="center"><p align="center">[url="klasse.htm"]Klasse[/url]</td>
geschrieben werden.
In meinem Code wird leider immer nur einer ausgegeben, nämlich das letzte Element der Liste.

CCRDude 2. Mai 2007 17:09

Re: Overview über Ordnerinhalt in HTML-Datei schreiben
 
Weil Deine Schleife nur der internen Variable etwas zuweist und nichts schreibt.

Delphi-Quellcode:
  AssignFile(Datei, (ExtractFilePath(ParamStr(0))+'.\splaene\overview.htm'));
  Rewrite(Datei);                  // Datei neu schreiben
  anfang:='<table border="1" width="23%" style="border-collapse: collapse" bordercolorlight="#000000" bordercolordark="#000000">'+SLineBreak+'<tr>';
  ende:='</tr>'+SLineBreak+'</table>';
  WriteLn(Datei, anfang);
  WriteLn(Datei, ende);
for count := 0 to Pred(LbOverview.Items.Count) do begin
      hcode:='<td align="center">'+sLineBreak+'<p align="center">[url="'+LbOverview.Items[count]+'"]'+LbOverview.Items[count]+'[/url]</td>';
      WriteLn(Datei, hcode);
   end;
  CloseFile(Datei);                // Datei schließen
Nicht wirklich schön, aber halt auch nur auf die Schnelle umgestellt.

Svenkan 2. Mai 2007 17:20

Re: Overview über Ordnerinhalt in HTML-Datei schreiben
 
Ach..:wall:
Ist klar, dasses dann nicht klappt. ^^
Musste es jetzt noch n bisschen umstellen:
Delphi-Quellcode:
  AssignFile(Datei, (ExtractFilePath(ParamStr(0))+'.\splaene\overview.htm'));
  Rewrite(Datei); // Datei neu schreiben
  anfang:='<html>'+sLineBreak+'<head>'+sLineBreak+'<title>Stundenplanübersicht '+schule+'</title>'+sLineBreak+'</head>'+sLineBreak+'<body>'+sLineBreak+'<table width="100%">'+SLineBreak+'<tr>';
  b:=sLineBreak+'<td align="left"><FONT face=Arial COLOR=#000080 style="font-size: 8pt">Stand: '+str+'</FONT><font color=#000080 face=Arial size=5></font></td>'+sLineBreak+'<td align="right"><FONT face=Arial COLOR=#000080 style="font-size: 8pt">'+schule+'</td></tr></table>'+sLineBreak+'<table align="center" border="1" width="23%" style="border-collapse: collapse" bordercolorlight="#000000" bordercolordark="#000000">'+sLineBreak+'<tr>';
  WriteLn(Datei, anfang);
  WriteLn(Datei, b);
  for count := 0 to Pred(LbOverview.Items.Count) do begin
   hcode:='<td align="center">'+sLineBreak+'[url="'+LbOverview.Items[count]+'"]'+LbOverview.Items[count]+'[/url]</td>';
   WriteLn(Datei, hcode);
  end;
  ende:='</tr>'+sLineBreak+'</table>'+sLineBreak+'<p align="right"><font face=Arial size=1 color=#0000A0>
Geschrieben mit '+programm+' von [email="svenkan@gmx.de"]Sven Kannenberg[/email]</font></p>'+sLineBreak+'</body>'+sLineBreak+'</html>';
  WriteLn(Datei, ende);
  CloseFile(Datei);                // Datei schließen
Ist es möglich, dass anfangs schon die Einträge der Listbox wirklich nach Alphabet/Zahlen geordnet werden und nicht 11 vor 8 oder so steht?
Bei PHP muss man das irgendwie innem Array zusammenfassen und dann sortieren lassen.
Wie funktioniert das in Delphi?

CCRDude 2. Mai 2007 19:10

Re: Overview über Ordnerinhalt in HTML-Datei schreiben
 
Für normales alphabetisches Sortieren dürfte LbOverview.Items.Sort ausreichen... ein etwas intelligenteres Sortieren, daß das mit den Zahlen idealer macht (Du meinst wahrscheinlich ähnlich wie der Windows Explorer?) fällt mir nur noch CustomSort ein, dem kannst Du eine eigene Vergleichsroutine übergeben, in der Du sortieren kannst wie Du lustig bist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:23 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