![]() |
eine Textdatei (.txt) in Dephi auswerten
Hi
Ich habe diese .txt Datei: SuperDepp =1 superdepp= 3 sUperdepp = 5 superdepp = 7 superdepp =9 superdepp= 3 Superdepp=7 SUPERDEPP=7 suppendepp=11 hupersep= b superdepp=a sUperdep=c superdepp==7 superdepp-9 superdepp 3 superdepp 7 pupersepp=7 SUPERdepp= 3 superDEPP= 5 SUPERDEPP= 7 SUPERDEPP= 9 SUPERDEPP= 7 SUPERDEPP= 9 SuPeRdEpP=9 Jede Zeile = eine SMS Damit die SMS gültig ist muss sie dies beinhalten: superdepp=1..10 groß und kleinschreibung ist egal, leerzeichen sind auch egal. nur wenn ein Buchstabe oder eine höhere Zahl als 10 hinter dem = steht, muss die SMS als ungültig gewertet werden Wie kann ich wissen wie oft z.B.: die 7 vorhanden ist? |
Re: eine Textdatei (.txt) in Dephi auswerten
Pos, Copy, Schleife, TStringlist.
|
Re: eine Textdatei (.txt) in Dephi auswerten
Hallo,
Ich würde den Text Zeilenweise in eine TSringList lesen und dann auswerten.Suche mal nach den Funktionen ReadLn und Pos Gruß Jens |
Re: eine Textdatei (.txt) in Dephi auswerten
Regex könnte hilfreich sein.
|
Re: eine Textdatei (.txt) in Dephi auswerten
Reguläre Ausdrücke würde ich bei der simplen Aufgabe nicht nutzen. Bei vielen Einträgen sind die viel zu langsam.
|
Re: eine Textdatei (.txt) in Dephi auswerten
Zitat:
Delphi-Quellcode:
und jetzt zunächst normalisieren
var
MyList : TStringList; ... MyList.LoadFromFile( 'SMS.txt' );
Delphi-Quellcode:
usw. bis der ganze Text reingewaschen ist
MyList.Text := UpperStr( MyList.Text ); // Alles in GROSS
MyList.Text := StringReplace( MyList.Text, ' ', '', [ rfReplaceAll ] ); // Leerzeichen raus MyList.Text := StringReplace( MyList.Text, '==', '=', [ rfReplaceAll ] ); // doppelte = Zeichen raus und jetzt kann man auswerten Du hast ja Beispiele für den Inhalt gegeben, es wäre aber ungemein hilfreich, wenn du für jede Zeile geschrieben hättest, ob die gültig ist, oder nicht was ist mit
Code:
gültig oder nicht?
superdepp 1
|
Re: eine Textdatei (.txt) in Dephi auswerten
Zitat:
Gruß K-H |
Re: eine Textdatei (.txt) in Dephi auswerten
Zitat:
Nach dem Normalisieren sieht die Datei wie folgt aus:
Code:
Jetzt können wir alle Zeilen rausschmeissen wo nicht "SUPERDEPP=" enthalten ist
SUPERDEPP=1
SUPERDEPP=3 SUPERDEPP=5 SUPERDEPP=7 SUPERDEPP=9 SUPERDEPP=3 SUPERDEPP=7 SUPERDEPP=7 SUPPENDEPP=11 HUPERSEP=B SUPERDEPP=A SUPERDEP=C SUPERDEPP=7 SUPERDEPP-9 SUPERDEPP3 SUPERDEPP7 PUPERSEPP=7 SUPERDEPP=3 SUPERDEPP=5 SUPERDEPP=7 SUPERDEPP=9 SUPERDEPP=7 SUPERDEPP=9 SUPERDEPP=9
Delphi-Quellcode:
jetzt sieht das so aus
idx := 0;
while idx < MyList.Count do if Pos( 'SUPERDEPP=', MyList[ idx ] ) = 1 then inc( idx ) else MyList.Delete( idx );
Code:
Jetzt wird nur noch geprüft, ob hinter "SUPERDEPP=" die gültigen Zahlen stehen und fertig ist die Laube
SUPERDEPP=1
SUPERDEPP=3 SUPERDEPP=5 SUPERDEPP=7 SUPERDEPP=9 SUPERDEPP=3 SUPERDEPP=7 SUPERDEPP=7 SUPERDEPP=A SUPERDEPP=7 SUPERDEPP=3 SUPERDEPP=5 SUPERDEPP=7 SUPERDEPP=9 SUPERDEPP=7 SUPERDEPP=9 SUPERDEPP=9 |
Re: eine Textdatei (.txt) in Dephi auswerten
Hallo,
ich habe das Beispiel mal fertig gestellt.
Delphi-Quellcode:
Kann man eigenlich irgendwie folgendes auch mit "POS" machen...
procedure TForm1.Button1Click(Sender: TObject);
var SMSList : TStringList; i : integer; iZeichen : integer; SMSBool : Boolean; temp : String; begin SMSList := TStringList.Create; SMSList.LoadFromFile( 'C:\Users\jens.hartmann\Documents\Superdepp.txt' ); SMSList.Text := UpperCase( SMSList.Text ); // Alles in GROSS SMSList.Text := StringReplace( SMSList.Text, ' ', '', [ rfReplaceAll ] ); // Leerzeichen raus SMSList.Text := StringReplace( SMSList.Text, '==', '=', [ rfReplaceAll ] ); // doppelte = Zeichen raus MEMO1.Text := SMSList.Text; MEMO1.Refresh; Sleep(2000); //nur zur Anzeigeverzögerung im MEMO i := 0; while i < SMSList.Count do begin if Pos( 'SUPERDEPP=', SMSList[ i ] ) = 1 then inc( i ) else SMSList.Delete( i ); end; MEMO1.Text := SMSList.Text; MEMO1.Refresh; Sleep(2000); //nur zur Anzeigeverzögerung im MEMO i := 0; while i < SMSList.Count do begin temp := SMSList[i]; for iZeichen := 1 to 9 do begin SMSBool := false; if pos (IntToStr(iZeichen), temp) = 11 then SMSBool := true; if SMSBool then Break; end; if not SMSBool then SMSList.Delete(i); inc(i) end; MEMO1.Text := SMSList.Text; end;
Delphi-Quellcode:
Gruß Jens
if pos(['0'..'9'],SMSList[i]) = 11 then
//oder if pos(IntToStr([0..9]),SMSList[i]) = 11 then |
Re: eine Textdatei (.txt) in Dephi auswerten
Es gibt mehrere Möglichkeiten, zu prüfen, ob die Zahl nach dem "=" eine richtige ist:
a) mit Copy() alle vor dem "=" wegschneiden und dann prüfen. Ich denk mal, dass es bei 10 Möglichkeiten noch verträglich ist, alle einzeln per If-Strukrur zu überprüfen. Ansonsten ne Schleife und ne Abbruchbedingung und dann musst du nur von 0 bis 10 zählen und beim richtigen Eintrag aus der schleife rausspringen. Wenn die Schleife am Ende ankommt, dann ist der Eintrag ungültig. b) Durch setzen von SMSLis.NameValueSperator := "=" kommst du mit SMSList.Values[idx] an die einzelnen Stellen nach dem "=" und kannst dann prüfen wie oben beschrieben. Bernhard |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:03 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