![]() |
Anfängerfrage (Datenbanken) aus der Praxis
Hallo,
ich bin ein ziemlicher Anfänger in Delphi habe folgende Aufgabe bekommen. Ich soll aus unformatierten Emails mit folgendem Format: (Beispieltext) Zitat:
Weil die unter dem Link angegebene Webseite nur für uns erstellt wurde und auch nur für kurze Zeit online ist, soll einmal eine Kopie komplett offline abgespeichert werden. (Ist für den Anfang noch nicht so wichtig) Soweit die Aufgabe. Ich habe keine Ahnung wie ich das schaffen soll. Bisher habe ich folgendes "geschafft" : Ich füge die Email über dem Zwischenspeicher (das reicht für unsere Zwecke) mit
Delphi-Quellcode:
in ein Memofeld1 ein. Aus diesem lese ich dann mit z.B.
begin
memo1.Clear; memo1.PasteFromClipboard; end;
Delphi-Quellcode:
die kompletten Zeilen Artikelnummer bis Preisgültigkeit in ein weiteres Memo2 ein.
var i: integer;
begin Memo2.Clear; for i := 0 to Memo1.Lines.Count - 1 do begin if Pos('Farbe: ', Memo1.Lines.Strings[i]) > 0 then Memo2.Lines.Add(Memo1.Lines.Strings[i]); end; Nun zu meinen Fragen
Vielen Dank fratis |
Re: Anfängerfrage (Datenbanken) aus der Praxis
Hallo fratis,
zunächst einmal herzlich willkommen Im Delphi-PRAXIS Forum. Du kannst alles nach dem Doppelpunkt mit Copy auslesen und die Trim - Funktion nutzen, die die Leerzeichen abschneidet. Schau dazu ggf. noch einmal in der OH nach, wenn du detailliertere Infos benötigst. Wie du die Seite zu einem Link findest, kannst du im Forum nachlesen. Suche z.B. nach ![]() Ansonsten ist dein Vorgehen korrekt. Die eMail nach bekannten Mustern parsen und die Daten in eine DB speichern. |
Re: Anfängerfrage (Datenbanken) aus der Praxis
Zitat:
Wie bekomme ich die Zeile mit der Linkadresse in ein eigenes Feld ? fratis |
Re: Anfängerfrage (Datenbanken) aus der Praxis
Zitat:
was hast Du den schon in deinem Programm? Du musste, wie schon geschrieben, nach "Schlüsselzeichen" suchen. Aber ohne den Quelltext deines Programmes kann dir kaum einer helfen ;-) |
Re: Anfängerfrage (Datenbanken) aus der Praxis
Leider habe ich erst dises :
Delphi-Quellcode:
Es sind sicherlich sehr viele Fehler in diesem "Programm".
unit Hauptformular;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Menus, StdActns, ActnList; type TForm1 = class(TForm) MainMenu1: TMainMenu; Datei1: TMenuItem; ffnen1: TMenuItem; ffnen2: TMenuItem; N1: TMenuItem; Beenden1: TMenuItem; Memo1: TMemo; OpenDialog1: TOpenDialog; ActionList1: TActionList; EditPaste1: TEditPaste; EditSelectAll1: TEditSelectAll; Einfgen1: TMenuItem; Edit1: TEdit; Button1: TButton; Memo2: TMemo; Button2: TButton; procedure ffnen2Click(Sender: TObject); procedure ffnen1Click(Sender: TObject); procedure Beenden1Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; i: integer; implementation {$R *.dfm} procedure TForm1.ffnen2Click(Sender: TObject); begin opendialog1.Execute; memo1.Lines.LoadFromFile(opendialog1.FileName); end; procedure TForm1.ffnen1Click(Sender: TObject); begin memo1.Lines.SaveToFile(opendialog1.FileName); end; procedure TForm1.Beenden1Click(Sender: TObject); begin close; end; procedure TForm1.Button1Click(Sender: TObject); begin Edit1.Clear; memo1.Clear; Edit1.PasteFromClipboard; memo1.PasteFromClipboard; end; procedure TForm1.Button2Click(Sender: TObject); var i: integer; begin Memo2.Clear; for i := 0 to Memo1.Lines.Count - 1 do begin if Pos('Ihre Artikelnummer: ', Memo1.Lines.Strings[i]) > 0 then Memo2.Lines.Add(Memo1.Lines.Strings[i]); end; for i := 0 to Memo1.Lines.Count - 1 do begin if Pos('Artikel: ', Memo1.Lines.Strings[i]) > 0 then Memo2.Lines.Add(Memo1.Lines.Strings[i]); end; for i := 0 to Memo1.Lines.Count - 1 do begin if Pos('Farbe: ', Memo1.Lines.Strings[i]) > 0 then Memo2.Lines.Add(Memo1.Lines.Strings[i]); end; for i := 0 to Memo1.Lines.Count - 1 do begin if Pos('Preis: ', Memo1.Lines.Strings[i]) > 0 then Memo2.Lines.Add(Memo1.Lines.Strings[i]); end; for i := 0 to Memo1.Lines.Count - 1 do begin if Pos('Hersteller: ', Memo1.Lines.Strings[i]) > 0 then Memo2.Lines.Add(Memo1.Lines.Strings[i]); end; for i := 0 to Memo1.Lines.Count - 1 do begin if Pos('Preisgültigkeit: ', Memo1.Lines.Strings[i]) > 0 then Memo2.Lines.Add(Memo1.Lines.Strings[i]); end; end; end. fratis |
Re: Anfängerfrage (Datenbanken) aus der Praxis
Also zuerst einmal musst du nicht für jedes Stichwort das komplette Memo erneut durchlaufen, es reicht also wenn du EINE for-Schleife hernimmst und da dann alle if-Abfragen reinpackst:
Delphi-Quellcode:
mit dem Copy kopierst du erstmal alles aus dieser Zeile nach "Ihre Artikelnummer:" (also ab Zeichen 20) und entfernst dann davon noch mit Trim() die Leerzeichen an Anfang und ggf. Ende.
for i := 0 to Memo1.Lines.Count - 1 do
begin if Pos('Ihre Artikelnummer:', Memo1.Lines[i]) > 0 then Memo2.Lines.Add(Trim(Copy(Memo1.Lines[i], 20, Length(Memo1.Lines[i])-19))); if Pos('Artikel', Memo1.Lines[i]) > 0 then ... usw. end; (um auf die Zeilen des Memos zuzugreifen reicht übrigens auch Memo1.Lines[i], das .Strings kann man sich hier sparen) |
Re: Anfängerfrage (Datenbanken) aus der Praxis
Vielen Dank - das hat mir schon mal sehr geholfen.
fratis |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:28 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