![]() |
Restliche Zeilen aus HTML Datei nach </table> löschen
Wie geht es das ich ein Programm schreib und er nach dem Befehl </table den Rest löscht? Am besten wäre es wenn er </table> löscht
mfg Fred |
Re: Restliche Zeilen aus HTML Datei nach </table> lösc
Hallo Fred,
versuche mal folgendes:
Delphi-Quellcode:
Delete(DeinString, Pos('</table>', DeinString), Length(DeinString));
|
Re: Restliche Zeilen aus HTML Datei nach </table> lösc
Liste der Anhänge anzeigen (Anzahl: 1)
Hab jetz soweit:
Delphi-Quellcode:
Es wird alle kompiliert aber ich bekommen beim drücken des Buttons folgende Fehlermeldung:
AssignFile(nFile, 'NEUTEILE.htm');
ReSet(nFile); while not EoF(nFile) do begin inc(i); ReadLn(nFile, zeile); Setlength(myArray, length(myArray)+1); myArray[i] := zeile; if myArray[i] = '</table>' then break; showmessage('TEST'); end; ---> Anlagen! |
Re: Restliche Zeilen aus HTML Datei nach </table> lösc
Hallo ihr zwei,
ihr könnt doch die HTML-Datei nicht einfach verstümmeln - das ist doch ein strukturiertes Dokument. Besser ihr analysiert das Dokument mit Hilfe eines Parsers und entfernt die nicht gewünschten Elemente. Freundliche Grüße vom marabu |
Re: Restliche Zeilen aus HTML Datei nach </table> lösc
Hi,
ich würde dir davon abraten es mittels AssignFile und readln zu machen. Du wirst letztlich (wie marabu schon sagte) nicht einfach alles hinter einem Tag löschen dürfen. Insbesondere die schließenden Tags mindestens </html> sollten nicht einfach gelöscht werden. Aber auch ein </table> gehört zu einem <table> und sollte damit nicht einfach aus der Datei fliegen. Sonst hast du dort gleich dein nächstes Problem. Für das Laden einer Datei zwischenspeichern aller Zeilen solltest du lieber auf eine TStringList (oder THashedStringList) zurückgreifen. Da gibt es den Befehl LoadFromFile und die liest alle Zeilen in eine Liste von Strings. Das Verlängern von dyn. Arrays um 1 ist immer so eine Sache und ich glaube du gibst den Speicher danach auch nicht wieder frei. Nicht wirklich schön. Mit einer TStringList kannst du jedenfalls alle Zeilen einlesen und einzeln durchgehen. Ab der Zeile in der du </table> findest, solltest du dir gut überlegen was du löschen darfst und was nicht. Parser (wieder mal wie marabu schon sagte) wäre eine Idee, alternativ müsstest du dir merken, welche Tags du gerade öffnend liest und darst den Ihnalt einschließlich des schließenden Tags löschen, aber eben nur bei denen. Andere Tags, die schon vor </table> geöffnet wurden müssen natürlich weiterhin geschlossen werden. Zudem würde dein Programm nicht berücksichtigen, was passiert wenn du ein Tag </table></html> (als Beispiel) hast. Denn HTML-Tags können auch beliebig nebeneinander (ohne Zeilenumbruch) geschrieben werden. Gruß Der Unwissende |
Re: Restliche Zeilen aus HTML Datei nach </table> lösc
Habs anderst gelöst:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Menus, ShellApi; type TForm1 = class(TForm) Panel1: TPanel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Edit4: TEdit; Edit5: TEdit; Edit6: TEdit; Label5: TLabel; Label6: TLabel; Button1: TButton; Button2: TButton; Label7: TLabel; Button3: TButton; Edit7: TEdit; Label8: TLabel; Button4: TButton; procedure Button2Click(Sender: TObject); procedure Men1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Panel1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; nFile : TextFile; implementation var myArray : array of string; k, i, j, z : Integer; ordner1, ordner2, ordner3 : String; {$R *.dfm} procedure TForm1.Button2Click(Sender: TObject); begin Button1.Enabled := True; Button4.Enabled := False; Edit1.Text := ''; Edit2.Text := ''; Edit3.Text := ''; Edit4.Text := ''; Edit5.Text := ''; Edit6.Text := ''; Edit7.Text := ''; end; procedure TForm1.Men1Click(Sender: TObject); begin Close; end; procedure TForm1.Button3Click(Sender: TObject); begin Close; end; procedure TForm1.FormCreate(Sender: TObject); var zeile : string; var nFile : Textfile; dummy : String; begin AssignFile(nFile, 'NEUTEILE.htm'); ReSet(nFile); while not EoF(nFile) do begin ReadLn(nFile, dummy); inc(j); end; CloseFile(nFile); ReSet(nFile); Setlength(myArray, j); i := 0; while not EoF(nFile) do begin ReadLn(nFile, zeile); myArray[i] := zeile; if myArray[i] = ' </tr>' then begin k := k+1; end; if myArray[i] = '</tr>' then begin k := k+1; end; if myArray[i] = '</table>' then break; inc(i); end; k := k+1; CloseFile(nFile); end; procedure TForm1.Button1Click(Sender: TObject); begin if Edit1.Text = '' then begin showmessage('Bitte alle Angaben vervollständigen!!'); end else if Edit2.Text = '' then begin showmessage('Bitte alle Angaben vervollständigen!!'); end else if Edit3.Text = '' then begin showmessage('Bitte alle Angaben vervollständigen!!'); end else if Edit4.Text = '' then begin showmessage('Bitte alle Angaben vervollständigen!!'); end else if Edit5.Text = '' then begin showmessage('Bitte alle Angaben vervollständigen!!'); end else if Edit6.Text = '' then begin showmessage('Bitte alle Angaben vervollständigen!!'); end else if Edit7.Text = '' then begin showmessage('Bitte alle Angaben vervollständigen!!'); end else begin setlength(myArray, i+22); ordner1 := stringreplace(Edit3.Text, '-', '', [rfReplaceAll]); ordner2 := copy(ordner1,0,4); ordner3 := copy(ordner1,3,8); myArray[i] := '<tr>'; myArray[i+1] := '<td width=76 valign=top style="width:2.0cm;padding:0cm 5.4pt 0cm 5.4pt">'; myArray[i+2] := '<p class=MsoNormal align=center style="text-align:center">'+IntToStr(k+1)+'</p>'; myArray[i+3] := '</td>'; myArray[i+4] := '<td width=345 valign=top style="width:258.55pt;padding:0cm 5.4pt 0cm 5.4pt">'; myArray[i+5] := '<p class=MsoNormal><span style="color:black;layout-grid-mode:line">'+Edit1.Text+'</span></p>'; myArray[i+6] := '</td>'; myArray[i+7] := '<td width=66 valign=top style="width:49.25pt;padding:0cm 5.4pt 0cm 5.4pt">'; myArray[i+8] := '<p class=MsoNormal align=center style="text-align:center">'+Edit2.Text+'</p>'; myArray[i+9] := '</td>'; myArray[i+10] := '<td width=90 valign=top style="width:67.45pt;padding:0cm 5.4pt 0cm 5.4pt">'; myArray[i+11] := '<p class=MsoNormal align=center style="text-align:center">'+Edit4.Text+'.'+Edit5.Text+'.'+Edit6.Text+'</p>'; myArray[i+12] := '</td>'; myArray[i+13] := '<td width=177 valign=top style="width:132.85pt;padding:0cm 5.4pt 0cm 5.4pt">'; myArray[i+14] := '<p class=MsoNormal align=center style="text-align:center">[url="'+ordner2+'/'+ordner3+'/'+Edit7.Text+'"]'+Edit3.Text+'[/url]</p>'; myArray[i+15] := '</td>'; myArray[i+16] := '</tr>'; myArray[i+17] := '</table>'; myArray[i+18] := '<p class=MsoHeader></p>'; myArray[i+19] := '</div>'; myArray[i+20] := '</body>'; myArray[i+21] := '</html>'; Button1.Enabled := False; Button4.Enabled := true; end; end; procedure TForm1.Button4Click(Sender: TObject); begin AssignFile(nFile, 'NEUTEILE.htm'); Rewrite(nFile); for z := 0 to length(myArray)-1 do begin WriteLn(nFile, MyArray[z]); end; CloseFile(nFile); setlength(myArray, j+1); Button1.Enabled := True; Button4.Enabled := False; Edit1.Text := ''; Edit2.Text := ''; Edit3.Text := ''; Edit4.Text := ''; Edit5.Text := ''; Edit6.Text := ''; Edit7.Text := ''; end; procedure TForm1.Panel1Click(Sender: TObject); begin ShellExecute(handle, PChar('OPEN'), PChar('NEUTEILE.htm'), nil, nil, sw_normal); end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:49 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 by Thomas Breitkreuz