Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Memo Feld export nach CSV (https://www.delphipraxis.net/166698-memo-feld-export-nach-csv.html)

Popov 26. Feb 2012 14:58

AW: Memo Feld export nach CSV
 
@Klaus

Ich habe dich zwar falsch verstanden, ich dachte du meinst nicht den Quelltext, sondern den Inhalt einer Webseite. Da ist das Auslesen der Tabellen eine Kleinigkeit, aber Tabelle aus dem Quelltext ist auch nicht problematisch:

In Memo1 ist der Quelltext, in Memo2 ist die Csv-Tabelle. Zu beachten ist, es wird die erste Tabelle konvertiert.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  s, sTemp: String;
  i, p1, p2: Integer;
begin
  s := Memo1.Lines.Text;

  //Vorsicht! Möglich Fehlerquelle Klein/Großschreibung der Tags
  //Zuerst ERSTE Tabelle suchen und auschneiden
  p1 := Pos('<table', s);
  p2 := Pos('</table', s);

  if p1 = 0 then
  begin
    MessageDlg('Tabelle nicht gefunden', mtInformation, [mbOk], 0);
    Exit;
  end;

  s := Copy(s, p1, p2 - p1); //Kopiert Bereich zwischen table-Tags
  p1 := Pos('>', s);
  s := Copy(s, p1 + 1, MaxInt); //Entfert <table ... > am Anfang

  //Zelle-Tags gegen Anführungzeichen ersetzten
  s := StringReplace(s, '<th>', '"', [rfReplaceAll, rfIgnoreCase]);
  s := StringReplace(s, '</th>', '",', [rfReplaceAll, rfIgnoreCase]);
  s := StringReplace(s, '<td>', '"', [rfReplaceAll, rfIgnoreCase]);
  s := StringReplace(s, '</td>', '",', [rfReplaceAll, rfIgnoreCase]);
  //Zeilen entfernen
  s := StringReplace(s, #13, '', [rfReplaceAll, rfIgnoreCase]);
  s := StringReplace(s, #10, '', [rfReplaceAll, rfIgnoreCase]);

  while Pos('</tr', s) > 0 do
  begin
    p1 := Pos('"', s); //sucht anfang erste Zelle
    p2 := Pos('</tr', s); //sucht ende letzte Zelle
    sTemp := Copy(s, p1, p2 - p1); //Kopiert Tabellensatz in sTemp
    Delete(s, 1, p2); //Löscht Tabellensatz in s

    Memo2.Lines.Add(sTemp); //Übergibt Tabellensatz am Memo2
  end;

  //Zueletzt aufräumen. Letztes Komma ist zuviel
  s := Memo2.Lines.Text;
  s := StringReplace(s, ',' + #13#10, #13#10, [rfReplaceAll]);
  Memo2.Lines.Text := s;
end;

klaus9 26. Feb 2012 21:26

AW: Memo Feld export nach CSV
 
hi Popov,

ich glaube das ist echt genial.. ich muß nachher nur mal das an meine seite angleichen..

Cool

Danke..

Hast du vielleicht auch eine idee das andere Problem zu lösen mit dem StringGrid, weil ich das auch gut gebrauchen kann.. Dort bekomme ich es leider nicht hin das er Datensätze an das Stringgrid übergibt und dann
hintereinander einfügt.. der überschreibt mir immer bei ausführen das stringgrid..

habe schon einiges versucht..

ich glaube es liegt am

Delphi-Quellcode:
  aNode := WebBrowser1.OleObject.Document.all.tags(Edit8.text).Item(StrToInt(edit9.text));
//  r := aNode.all.tags('tr').Length;//Zeilen feststellen
  r := aNode.all.tags(Edit10.text).Length;//Zeilen feststellen
  StringGrid1.RowCount := r;
  for z := 0 to r-1 do
    begin
Daran StringGrid1.RowCount := r;
wenn ich stringGrid1.RowCount := StringGrid1.RowCount +1; mache würde er es glaub ich als letzte stelle im grid anhängen kann aber dann nicht die " r := aNode.all.tags(Edit10.text).Length;//" mit einfügen
auch " StringGrid1.RowCount := r + 1;" funktioniert leider nicht :(

vagtler 26. Feb 2012 21:42

AW: Memo Feld export nach CSV
 
Zitat:

Zitat von klaus9 (Beitrag 1152999)
[...] Daran StringGrid1.RowCount := r;
wenn ich stringGrid1.RowCount := StringGrid1.RowCount +1; mache würde er es glaub ich als letzte stelle im grid anhängen kann aber dann nicht die " r := aNode.all.tags(Edit10.text).Length;//" mit einfügen
auch " StringGrid1.RowCount := r + 1;" funktioniert leider nicht :(

Wenn Du endlich einmal Deine Problemstellungen vernünftig beschreiben würdest, würdest Du sehen, dass Du jetzt eigentlich selbst auf die Lösung kommen müsstest.

Wenn da nur nicht so viele Konjunktive bei Dir wären...

Coffeecoder 27. Feb 2012 08:08

AW: Memo Feld export nach CSV
 
Wenn du ein Stringgrid verwendest und die Daten in eine CSV Datei speichern magst, kannst du auch mal hier gucken.

klaus9 27. Feb 2012 09:33

AW: Memo Feld export nach CSV
 
Hi

Vielen Dank, das mit der csv ist ja genial.. Kann ich auch gut gebrauchen .


Dankeschön

p80286 27. Feb 2012 12:26

AW: Memo Feld export nach CSV
 
An popov's Lösung ist die direkte Übergabe an das Memo, der Schwachpunkt. Benutze hier lieber eine Stringlist, von dort aus ist das Befüllen eines Stringgrids und/oder einenes Memos eigentlich kein Problem.

Auch wenn vagtler ein wenig unfreundlich war, in der Sache hat er durchaus recht. Überleg Dir was Du willst und versuch es so zu formulieren, daß geistig etwas zurück gebliebene Menschen es verstehen. Dann ist es für Dich auch einfacher an die Lösung zukommen.

Gruß
K-H

Popov 27. Feb 2012 13:36

AW: Memo Feld export nach CSV
 
Zitat:

Zitat von p80286 (Beitrag 1153120)
An popov's Lösung ist die direkte Übergabe an das Memo, der Schwachpunkt.

Popov's Lösung hat mehr als nur einen Schwachpunkt. Ich wollte nur das Prinzip zeigen, und dass es nicht so schwer ist den Quellcode zu parsen. Das Ganze funktioniert so, ist aber nicht Idiotensicher. Beispiel: <td> kann auch als <td class="x"> geschrieben werden. Es besser zu machen ist aber auch kein großer Akt.

p80286 27. Feb 2012 13:45

AW: Memo Feld export nach CSV
 
mir ging's nur darum, die Datenhaltung im Memo zu unterbinden,
das ist ja nicht nur eine Frage des Stils sondern auch der Datenintegrität.
(der Schwachpunkt war nicht pers. gemeint!)
Gruß
K-H

Popov 27. Feb 2012 13:53

AW: Memo Feld export nach CSV
 
Hab es auch nicht so verstanden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:25 Uhr.
Seite 3 von 3     123   

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