Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi eine Textdatei (.txt) in Dephi auswerten (https://www.delphipraxis.net/145803-eine-textdatei-txt-dephi-auswerten.html)

Financeflash 8. Jan 2010 16:00


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?

Blackheart 8. Jan 2010 16:04

Re: eine Textdatei (.txt) in Dephi auswerten
 
Pos, Copy, Schleife, TStringlist.

Jens Hartmann 8. Jan 2010 16:04

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

Namenloser 8. Jan 2010 16:06

Re: eine Textdatei (.txt) in Dephi auswerten
 
Regex könnte hilfreich sein.

Matze 8. Jan 2010 16:18

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.

Sir Rufo 8. Jan 2010 16:24

Re: eine Textdatei (.txt) in Dephi auswerten
 
Zitat:

Zitat von Jens Hartmann
Hallo,

Ich würde den Text Zeilenweise in eine TSringList lesen und dann auswerten.Suche mal nach den Funktionen ReadLn und Pos

Gruß Jens

wieso so umständlich?
Delphi-Quellcode:
var
  MyList : TStringList;
...
  MyList.LoadFromFile( 'SMS.txt' );
und jetzt zunächst normalisieren
Delphi-Quellcode:
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
usw. bis der ganze Text reingewaschen ist

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:
superdepp 1
gültig oder nicht?

p80286 8. Jan 2010 16:56

Re: eine Textdatei (.txt) in Dephi auswerten
 
Zitat:

Zitat von Sir Rufo

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:
superdepp 1
gültig oder nicht?

Nach #1 sind alle Zeilen gültig die =1..=9,=10 enthalten also superdepp 1 wäre ungültig, gleiches gilt für superdepp=100. Man müßte also auch auf ein nachfolgendes Blank bzw. Stringende prüfen.

Gruß
K-H

Sir Rufo 8. Jan 2010 18:18

Re: eine Textdatei (.txt) in Dephi auswerten
 
Zitat:

Zitat von p80286
Nach #1 sind alle Zeilen gültig die =1..=9,=10 enthalten also superdepp 1 wäre ungültig, gleiches gilt für superdepp=100. Man müßte also auch auf ein nachfolgendes Blank bzw. Stringende prüfen.

Gruß
K-H

Nein, muss man nicht ...

Nach dem Normalisieren sieht die Datei wie folgt aus:
Code:
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
Jetzt können wir alle Zeilen rausschmeissen wo nicht "SUPERDEPP=" enthalten ist
Delphi-Quellcode:
idx := 0;
while idx < MyList.Count do
  if Pos( 'SUPERDEPP=', MyList[ idx ] ) = 1 then
    inc( idx )
  else
    MyList.Delete( idx );
jetzt sieht das so aus
Code:
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
Jetzt wird nur noch geprüft, ob hinter "SUPERDEPP=" die gültigen Zahlen stehen und fertig ist die Laube

Jens Hartmann 9. Jan 2010 14:27

Re: eine Textdatei (.txt) in Dephi auswerten
 
Hallo,

ich habe das Beispiel mal fertig gestellt.
Delphi-Quellcode:
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;
Kann man eigenlich irgendwie folgendes auch mit "POS" machen...

Delphi-Quellcode:
  if pos(['0'..'9'],SMSList[i]) = 11 then
  //oder
  if pos(IntToStr([0..9]),SMSList[i]) = 11 then
Gruß Jens

rollstuhlfahrer 9. Jan 2010 15:48

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 05:06 Uhr.
Seite 1 von 2  1 2      

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