AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Memo Feld export nach CSV

Ein Thema von klaus9 · begonnen am 25. Feb 2012 · letzter Beitrag vom 27. Feb 2012
Antwort Antwort
Seite 1 von 2  1 2      
Popov
(Gast)

n/a Beiträge
 
#1

AW: Memo Feld export nach CSV

  Alt 25. Feb 2012, 21:09
Also ich habe einen Button der mir den Html Outertext kopiert und mir dann halt in ein Memo einfügt und dann wollte ich jetzt gerne den herauskopierten text auswerten und in eine csv datei schreiben..
Also jetzt hast du drei mal nacheinander die gleiche Frage gestellt ohne sie zu konkretisieren.

also du beginnst am besten mit for i := 0 to Memo1.Lines.Count - 1 do an.

Zuerst löscht du den Bereich vor der Tabelle

Dann löscht du den Bereich nach der Tabelle

Im Block gehst du nun mit Memo1.Lines[i] Zeile für Zeile durch (ich kürze das ab in dem ich die Zeile als s Bezeichne)

Den s String bearbeitest du mit for k := 1 to Length(s)

Am Anfang s fügst du ein " Anführungszeichen Zeichen ein

Weiterhin suchst du in s nach Tab-Zeichen, die ersetzt du mit "," (Anführungszeichen Komma Anführungszeichen)

Ans Ende s fügst du du ein " Anführungszeichen Zeichen ein

Das Alles Zeile für Zeile

Das alles dann mit Memo1.Lines.SaveToFile(c:\date.csv'); speichern
  Mit Zitat antworten Zitat
vagtler

Registriert seit: 9. Jul 2010
Ort: Köln
667 Beiträge
 
Delphi 2010 Professional
 
#2

AW: Memo Feld export nach CSV

  Alt 25. Feb 2012, 21:38
[...] Weiterhin suchst du in s nach Tab-Zeichen, die ersetzt du mit "," (Anführungszeichen Komma Anführungszeichen) [...]
Auf Grund der mangelnden Anforderungsdarstellung würde es mich aber nicht wundern, wenn die Einträge gar nicht per Tab getrennt sind und der Threadersteller auf massive Probleme stößt, die Zeilen zu parsen (ich denke da nur an Straßennamen, die Leerzeichen enthalten wie z.B. Aachener Straße).

Aber solange Klaus sich da in Schweigen hüllt und wir bestenfalls nur häppchenweise Informationen bekommen ist das alles nur Spekulation.
  Mit Zitat antworten Zitat
klaus9

Registriert seit: 4. Dez 2011
123 Beiträge
 
#3

AW: Memo Feld export nach CSV

  Alt 25. Feb 2012, 22:39
hi

ich glaub ich habe noch ein Problem.. ich müßte glaub ich erstmal richtig parsen..

Hat jemand da eine Idee wie ich z.B. in einer Webseite ein Table auslesen kann, vielleicht geht es ja doch einfacher als über in memo.
  Mit Zitat antworten Zitat
vagtler

Registriert seit: 9. Jul 2010
Ort: Köln
667 Beiträge
 
Delphi 2010 Professional
 
#4

AW: Memo Feld export nach CSV

  Alt 25. Feb 2012, 22:42
[...] Hat jemand da eine Idee wie ich z.B. in einer Webseite ein Table auslesen kann, [...]
Laut Deinen Informationen machst Du das doch schon.

Ich glaube, Du meinst etwas ganz anderes. Aber Du scheinst nicht in der Lage oder Willens zu sein, Deine Problemstellung genau und vollständig(!) zu formulieren.
  Mit Zitat antworten Zitat
klaus9

Registriert seit: 4. Dez 2011
123 Beiträge
 
#5

AW: Memo Feld export nach CSV

  Alt 26. Feb 2012, 14:27
ja das stimmt soweit funktioniert es ja auch nur, jedesmal wenn ich den Button13 drücke überschreibt er mir die Stringgrid1 tabelle. Nur ich müßte es irgendwie hinbekommen das wenn ich 13 drücke. die jeweiligen datensätze angehängt werden

also sagen wir in der webseite steht html seite 1, 50 datensätze in der tabelle

bla ....
bla ....
bla ....
bla ....
bla ....
bis zur 50. stelle.


nun wenn ich die webseiten nach einander abklicke und dann jeweils die 13 drücke überschreibt er mir die werte anstatt diese hinter die vorhandenen werte zu setzen in der stringgrid.

das ist mein kleines Problemchen.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

AW: Memo Feld export nach CSV

  Alt 26. Feb 2012, 14:30
Merk dir die letzte gefüllte Zeile im StringGrid.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#7

AW: Memo Feld export nach CSV

  Alt 26. Feb 2012, 14:58
@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;
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#8

AW: Memo Feld export nach CSV

  Alt 26. Feb 2012, 03:05
hi

ich glaub ich habe noch ein Problem.. ich müßte glaub ich erstmal richtig parsen..

Hat jemand da eine Idee wie ich z.B. in einer Webseite ein Table auslesen kann, vielleicht geht es ja doch einfacher als über in memo.
Ich glaube du betest gerade. Du betest um das Wunder der Funktion ConvertWebTabInCsvTab. Einen besseren Tipp als meinen wirst du aber nicht bekommen, denn ich habe in vier Minuten nach der Anleitung oben einen Konverter geschrieben und er funktioniert. Dann habe ich noch fünf Minuten investiert und eine automatische Suche nach einer Tabelle im kopierten Text geschrieben (egal wie gut die ist, aber sie funktioniert).

Nur während hier Antworten kommen, ist deine einzige Reaktion drauf deine Frage zu wiederholen zu wiederholen zu wiederholen, statt drauf einzugehen.

Ein Tipp: wenn du nicht programmieren willst, dann nimm Excel. Der konvertiert für dich
  Mit Zitat antworten Zitat
klaus9

Registriert seit: 4. Dez 2011
123 Beiträge
 
#9

AW: Memo Feld export nach CSV

  Alt 26. Feb 2012, 12:00
Hi Popov deinen Tipp finde ich super..

habe heute mal nen bisschen rum probiert..

ich habe jetzt ne super idee rausgefunden.. bzw. gegoogelt.

Also ich habe eine Webseite da muß ich auf eine Tabelle die sich im HTML Text befindet. und pro Seite habe ich 50 Auftragsdaten untereinander geglidert, gesamt ca. 1500 Aufträge


Seite ist so ca. aufgebaut..

1-50, 51-100, 101-150, 151-200.... usw. bis 1451-1500 (Das sind jeweils Links zu den 50er Blöcken Aufträgen!


Der Aufbau ist wie bereits schon geschrieben.. ca so aufgebaut

Webseiten beschreibung
bla blub
blub
bla

und dann kommen die Aufträge

Auftragsnummer - Status - KD Name - Anschrift usw.
12313 offen Günther Anschrift
34424 bearbeitet Klaus Anschrifts
usw.



so jetzt habe ich im Netz folgenden Code gefunden und etwas angepaßt auf meine wünsche..


Code:
Delphi-Quellcode:
procedure TForm1.Button13Click(Sender: TObject);

var aNode,aNode2 : Olevariant;
   r,c,z,z2 : Integer;
begin
  //item(6) = 7te Tabelle in der Webseite
// aNode := WebBrowser1.OleObject.Document.all.tags('table').Item(7);
  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
// aNode2 := aNode.all.tags('tr').Item(z);
    aNode2 := aNode.all.tags(Edit11.text).Item(z);
// c := aNode2.all.tags('th').Length;
    c := aNode2.all.tags(Edit12.text).Length;
    if c > 0 then
      begin
      if c > StringGrid1.ColCount then
        StringGrid1.ColCount := c;
      for z2 := 0 to c-1 do
// StringGrid1.Cells[z2,z] := aNode2.all.tags('th').Item(z2).innerText;
         StringGrid1.Cells[z2,z] := aNode2.all.tags(Edit13.text).Item(z2).innerText;
      end;
// c := aNode2.all.tags('td').Length;
    c := aNode2.all.tags(Edit14.text).Length;
    if c > 0 then
      begin
      if c > StringGrid1.ColCount then
        StringGrid1.ColCount := c;
      for z2 := 0 to c-1 do
// StringGrid1.Cells[z2,z] := aNode2.all.tags('td').Item(z2).innerText;
        StringGrid1.Cells[z2,z] := aNode2.all.tags(Edit15.text).Item(z2).innerText;
      end;
    end;

end;
In den Edit Feldern stehen die Werte um auf die Tabelle zu kommen, die Tabelle der HTML Seite.. Bei meiner mußte ich nur die Tabellen Nummer von 6 auf 5 stellen der Rest also die "TD" und "TH" Kennzeichnungen sind geblieben..

Nun das funktioniert schonmal super.. Popov deine Idee ist auch super aber ich stoße damit an ein weiteres Problem was ich nicht bedacht hatte... unswar. Jetzt habe ich die Werte ausgelesen im Memo.textfeld und die stehen wie folgt dort

Auftragsnummer-Status-KD Name-Anschriftusw.
12313offenGüntherAnschrift
3442bearbeitetKlausAnschrifts


statt mit leerzeichen so

Auftragsnummer - Status - KD Name - Anschrift usw.
12313 offen Günther Anschrift
34424 bearbeitet Klaus Anschrifts
usw.

..

Und dieses würde bei der weiterverarbeitung dann für mich zu neuen Problemen führen..

Aber ich bin echt Dankbar für deine Tipps hast mir bereits bei einem anderem Problem super super gut weitergeholfen..

Nun jetzt habe ich aber auch wieder ein weiteres Problem.. Wie kann ich mit dem oben stehenden Code für das Parsen in ein Stringgrid erreichen, das er mir zeilen unten dran hängt. Weil wenn ich jetzt die 50 Seiten schritte durch gehe und immer Button13 drücke parster er mir nur den aktuellen wert, logisch und hängt die daten nicht hinter die vorhandenen Werte..

ähnlich wie beim Memofeld schreibe ich

memo2.Text:=WebBrowser1.OleObject.document.body.ou tertext;
dann schreibt er es ins memo, wiederhole ich es überschreibt er mir das memo2 feld

Mit folgendem hängt er einfach hinten dran die folgenden Werte.
Memo2.Lines.Append(WebBrowser1.OleObject.document. body.innerText);


Das würde ich gerne jetzt im Stringgrid mit meinem Code aus Button13 auch erreichen.. Hat jemand eine idee ?

Und mein zweites Problem wie bekomme ich die Werte vom StringGrid nach Excel ?

Ohh jee ich hoffe habe alles verständlich erklären können.. Manchmal ist das wirklich blöd eigentlich einfache Dinge zu erklären.. Hoffe es ist aber halbwegs gut verständlich.

Gruß
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

AW: Memo Feld export nach CSV

  Alt 26. Feb 2012, 12:07
Und wie kommen die Daten von dem Stringgrid ins Memo? Und warum erst noch ns memo kopieren, wenn sie doch schon schön getrennt in den Zellen des Stringgrids stehen?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:26 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