Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Auslesen von Dateiinhalten
GBrainI - Do 27.08.09 16:36
Titel: Auslesen von Dateiinhalten
Hallo erstmal,
Ich habe folgendes Problem:
Ich möchte aus einer Text Datei (Editor) auf meinem Desktop, die ganzen Emailadressen welche sich in der Textdatei befinden(unzählig viele) raussuchen lassen und in eine neue Editor Datei reinschreiben lassen. Quasi nur die Emailadressen untereinander aufgelistet bekommen.
da in der Eingabedatei alles aneinander geschriebeni ist und weder mit, noch ; sondern mit " die wörter voneinander getrennt sind wäre es sinvoll ein @ zeichen zu suchen und darauf hin nach links bis zum " und rechts bis zum '.' dann wieder bis zum " zu suchen und die Emailadresse somit rausgefiltert in die neue editor zeilen einzufügen.
aber weis nicht ob dieser Ansatz richtig ist, geschweige denn ob das so einfahc geht. bin noch ein "Neuling" bezüglich Delphi 5 enterprise.
hat jemand ne gute idee ?
(am bestne direkt mit ner guten Source)
danke schonmal
Moderiert von
Narses: Topic aus VCL (Visual Component Library) verschoben am Do 27.08.2009 um 18:01
der organist - Do 27.08.09 16:51
einmal, schreib dir Pseudocode um deinen Algo herauszufinden, dann weisst du, ob es überhaupt funzt.
Brauchst du Befehle um Dateien zu verwenden oder um den Algo auszuführen?
Hidden - Do 27.08.09 22:14
Hi :)
Zunächst einmal musst du deinen Text aus der Datei laden. Dazu benötigst du den vollständigen Dateipfad, beispielsweise 'C:\Dokumente und Einstellungen\..\Desktop\Emails.txt'. Wenn sich die Datei nicht an einem festen Ort befindet, musst du ihn entweder mit einem TOpenTextFileDialog finden, oder aber relativ zu einem bestimmten Ordner(Pfad zu Eigene Dateien, .. lässt sich ermitteln -> Suche) danach suchen. Nun verwendest du
TStringlist.LoadFromFile, um an den Textinhalt zu kommen.
Da doch nicht immer ganz klar ist, welche Schritte nun genau benötigt werden, wäre demnächst eine kleine Liste der dir Schwierigkeiten bereitenden Teilaufgaben gut :)
Wenn du wirklich vor nicht allzu langer Zeit zu Programmieren begonnen hast und noch keine Zählschleife selbst schreiben kannst, rate ich dir doch nochmal zu einem oder zwei Tutorials. Den hier mal besucht?
Crashkurs von Christian S. [
http://www.christian-stelzmann.de/artikel/CrashkursReloaded/].
Wenn dir aber die generellen Möglichkeiten, wie etwa eine Schleife, bereits in ein paar Anwendungsfällen bekannt sind, solltest du das Folgende auf jeden Fall nicht übernehmen, sondern lieber selbst entwickeln:
Um das @ zu finden, gehst du den String aus der Textdatei mit einer Zählschleife durch und gehst bei Erfolg mit zwei weiteren Zählschelifen jeweils nach links und rechts. Am besten, du liest meinen Code und deaktiviert mal schnell die Tasten [Strg]+[c]. Wenn du ihn verstanden hast, schreibst du alles einmal selbst und vergleichst am Ende - so lernst du wahrscheinlich am meißten dabei :)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| procedure ExtractEmailAdresses(const S: String); var aAdressen: TStringlist; aAnfang, aEnde: Integer; aLen: Integer; i: Integer; begin aAdressen := TStringlist.Create; aLen := Length(S); i := aLen; while i <> 0 do begin if S[i] = '@' then begin aEnde := i; while (S[aEnde] <> '.') and (aEnde <> aLen) do Inc(aEnde); while (S[i] <> '"') and (i <> 1) do Dec(i); aAdressen.Append(Copy(S, i, aEnde)); end; Dec(i); end; aAdressen.SaveToFile(); aAdressen.Free; end; |
Wenn du dann noch Unterscheide zwischen unseren Versionen finden kannst, entfernst du diese am beten nicht gleich, sondern postest mal deinen Quelltext. Dann können wir dir auch genau erklären, warum an einer bestimmten Stelle nun der Check auf (i <> 1) kommt, und nicht der auf 0, etc.
mfG,
GBrainI - Di 01.09.09 10:15
Das sind wirklich hervorragende Ideen, welche nichtmal schwer bei der Umsetzung erscheinen. Deshalb bedanke ich mich hier schonmal, jedoch gibts auch diesmal wieder eine Frage ... (leider).
Ich kriege 3 Fehlermeldungen :
- Unclear Identifer i,
kann ich es einfach bei Integer reinschreiben ?
-[Warning] Unit1.pas(38): Comparing signed and unsigned types - widened both operands
das ist jeweils bei "do" die fehlermeldung.
und zuletzt noch, dass ich nich genug paramter angegeben hätte...bei button1.
könnt ihr mich aufklären weshalb ich diese fehler meldungen bekomme?
Wie ich diese beheben kann?
In welcher Zeile wird denn meine Datei geladen die gelesen werden soll ?
sie liegt am desktop und heisst einfach test.txt (ist voll mit Emailadressen--sehr unübersichtlich)
danke im voraus.
Hidden - Di 01.09.09 22:13
Hi :)
[Oh, vllt. sollte man seine Posts auch absenden - keine schlechte Idee :D]
Die Deklaration von i fehlte, habe ich ergänzt :) Über die Vergleichswarnung bzgl. Vorzeichenloser/-behafteter Zahlen kann ich nur spekulieren, ich verwende im obigen Code ausschließlich Integer = Integer, Char = Char und Char = Konstante, das kann es alles nicht sein. Auch der Buttonklick kann wohl kaum meinen Source betreffen ;) Kannst du deinen Quelltext mal posten und die betreffenden Zeilen highlighten :?:
Das Laden erfolgt analog zum Speichern und ist im obigen Quelltext nicht enthalten - der Methode wird ja der String übergeben, das heißt du müsstest sie mit dem String aus der Datei aufrufen.
ExtractEmailAdresses(StringlistDateiEins.Text);
Grüße,
GBrainI - Mi 02.09.09 10:49
Danke für die audwendige Information, aber das Problem hat sich erledigt ich machs jetzt mit einem anderen verfahrn.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!