Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   String Problem (https://www.delphipraxis.net/163035-string-problem.html)

blaky 13. Sep 2011 15:35

String Problem
 
Code:
var
readline: string;
ATLN: string;

if ((Pos('33', readline) = 1) and (readline[4] = '2')) then // Langrufnummer kommenden Amtsl.
    begin
      readline_identifiziert:= true;
      for I := 11 to 34 do
        begin
          if readline[I] =' ' then break else
             ATLN:=ATLN+readline[I];
        end;
       showmessage(datetostr(date)+' '+timetostr(time)+'-> kommender Anruf von RufNr: ' + ATLN + 'auf Amtsleit.: ' + readline[6] + readline[7] + readline[8] + readline[9] );
    end;
habe bei obigem Code das Problem das mir die showmessage alles was NACH der Variabel ATLN steht nicht mit ausgibt.
Weise ich ATLN etwas statisches zu (also wird nicht durch die for schleife gefüllt) wird mir die gesamte showmessage angezeigt.

stehe grad voll auf dem schlauch

Bernhard Geyer 13. Sep 2011 15:37

AW: String Problem
 
Wie wäre es mit Berücksichtigung der Compilerwarnung das ein nicht initialisierte Variable verwendet wird?

DeddyH 13. Sep 2011 15:38

AW: String Problem
 
Steht vielleicht ein #0 in ATLN?

Luckie 13. Sep 2011 15:39

AW: String Problem
 
Guck dir im Debugger mal die variable an. Steht am Ende eventuell ein #0 oder ein anders Steuerzeichen?
Delphi-Quellcode:
ATLN := Trim(ATLN);

blaky 13. Sep 2011 16:03

AW: String Problem
 
Zitat:

Zitat von Luckie (Beitrag 1124072)
Guck dir im Debugger mal die variable an. Steht am Ende eventuell ein #0 oder ein anders Steuerzeichen?
Delphi-Quellcode:
ATLN := Trim(ATLN);

... shit zu früh gefreut klappt doch nicht

blaky 13. Sep 2011 16:17

AW: String Problem
 
Code:
    if ((Pos('33', readline) = 1) and (readline[4] = '0')) then // Langrufnummer kommenden Tln.
    begin
      readline_identifiziert:= true;
      for I := 11 to 34 do
        begin
          if readline[I] =' ' then break else
             ATLN:=ATLN+readline[I];
        end;
       ATLN := Trim(ATLN);
       showmessage(datetostr(date)+' '+timetostr(time)+'-> kommender Anruf von RufNr: '+ ATLN +' auf Nst: ' + readline[6] + readline[7] + readline[8] + readline[9]);

    end;
selbst mit Trim funktioniert es nicht ??? nach ATLN ist schluss

himitsu 13. Sep 2011 16:32

AW: String Problem
 
Ist readline überhaubt mit genug Zeichen gefüllt?

Schalte mal die Bereichsprüfung an, in den Projektoptionen.

Zitat:

Zitat von Bernhard Geyer (Beitrag 1124068)
Wie wäre es mit Berücksichtigung der Compilerwarnung das ein nicht initialisierte Variable verwendet wird?

Strings sind immer initialisiert, da dieses automatisch geschieht.

Bernhard Geyer 13. Sep 2011 16:38

AW: String Problem
 
Zitat:

Zitat von himitsu (Beitrag 1124089)
Zitat:

Zitat von Bernhard Geyer (Beitrag 1124068)
Wie wäre es mit Berücksichtigung der Compilerwarnung das ein nicht initialisierte Variable verwendet wird?

Strings sind immer initialisiert, da dieses automatisch geschieht.

Stimmt. Habs mit allen anderen lokalen Variablen verwendet :wall:

blaky 13. Sep 2011 16:49

AW: String Problem
 
die readline ist immer genug gefüllt..

habe gerade festgestellt das es sporadisch mit
Code:
Trim(ATLN);
funktioniert aber nur sporadisch

das bringt mich zum Schluss das in der readline außer Leer und Steuerzeichen sporadisch noch andere Zeichen sind

jemand ne Idee wie ich alles außer Zahlen 0-9 rausfiltere?

Klaus01 13. Sep 2011 16:58

AW: String Problem
 
.. da gab es vor kurzem mal einen Thread dazu

Grüße
Klaus

p80286 13. Sep 2011 17:01

AW: String Problem
 
Zitat:

Zitat von blaky (Beitrag 1124093)
jemand ne Idee wie ich alles außer Zahlen 0-9 rausfiltere?

Delphi-Quellcode:
for i:=a to b do
  if readln[i] in ['0'..'9'] then ATN:=ATN+readln[i]
else ATN:=ATN+' ';
oder so ähnlich

Gruß
K-H

p.s.
readln ist echt nicht so DER Name für eine Variable

DeddyH 13. Sep 2011 17:04

AW: String Problem
 
Delphi-Quellcode:
for I := 11 to 34 do
  case readline[I] of
    ' ': break;
    '0'..'9': ATLN := ATLN+readline[I];
  end;
Ungetestet, sollte aber tun.

[edit]
Zitat:

Zitat von p80286 (Beitrag 1124097)
p.s.
readln ist echt nicht so DER Name für eine Variable

Hab ich auch erst gedacht, aber da die Prozedur ReadLn und die Variable ReadLine heißt, sollte sich da nichts beißen. [/edit]

himitsu 13. Sep 2011 17:09

AW: String Problem
 
Zitat:

Zitat von blaky (Beitrag 1124093)
jemand ne Idee wie ich alles außer Zahlen 0-9 rausfiltere?

Da du ATLN selber befüllst,
indem du nur 0-9 dort anhängst?

p80286 13. Sep 2011 17:10

AW: String Problem
 
Ich dachte mehr daran:
Delphi-Quellcode:
f:textfile;

assignfile(f:'myfile');
reset(f);
readln(f,mystring);
und richtig lesen kann ich auch nicht.
Gruß
K-H

blaky 13. Sep 2011 17:11

AW: String Problem
 
die readline wird fremd über eine TCP Verbindung gefüllt
aber
ich glaub ich habs..

hab jetzt mit ner 2. Variable und ner 2. For Schleife gelöst

Code:
var
readline: string;
ATLN: string;
ATLNx: string;

if ((Pos('33', readline) = 1) and (readline[4] = '0')) then // Langrufnummer kommenden Tln.
    begin
      readline_identifiziert:= true;
      for I := 11 to 34 do
        begin
           ATLN:=ATLN+readline[I];
        end;

      for I := 0 to length(ATLN) do
         begin
          if ((ATLN[i] = '0') or (ATLN[i] = '1') or (ATLN[i] = '2') or (ATLN[i] = '3') or (ATLN[i] = '4') or (ATLN[i] = '5') or (ATLN[i] = '6') or (ATLN[i] = '7') or (ATLN[i] = '8') or (ATLN[i] = '9')) then
              begin
                ATLNx:=ATLNx+ATLN[i];
              end;
         end;
       ATLNx := Trim(ATLNx);
       showmessage(datetostr(date)+' '+timetostr(time)+'-> kommender Anruf von RufNr: '+ ATLNx +' auf Nst: ' + readline[6] + readline[7] + readline[8] + readline[9]);

    end;
wer etwas eleganteres hat bitte nicht zögern

DeddyH 13. Sep 2011 17:13

AW: String Problem
 
#12 hast Du ausprobiert?

p80286 13. Sep 2011 17:15

AW: String Problem
 
Zitat:

Zitat von blaky (Beitrag 1124101)
wer etwas eleganteres hat bitte nicht zögern

Wie wäre es mit DeddyH's Vorschlag?

Gruß
K-H

edith:
der rote kasten hat Feierabend

blaky 13. Sep 2011 17:21

AW: String Problem
 
Zitat:

Zitat von p80286 (Beitrag 1124104)
Zitat:

Zitat von blaky (Beitrag 1124101)
wer etwas eleganteres hat bitte nicht zögern

Wie wäre es mit DeddyH's Vorschlag?

Gruß
K-H

edith:
der rote kasten hat Feierabend

hatte ich ganz überlesen.. :P das klappt super! Danke DeddyH

himitsu 13. Sep 2011 17:29

AW: String Problem
 
Es gibt auch nocht den IN-Parameter:
Delphi-Quellcode:
if readline[i] in ['0'..'9'] then

blaky 13. Sep 2011 17:40

AW: String Problem
 
Zitat:

Zitat von himitsu (Beitrag 1124107)
Es gibt auch nocht den IN-Parameter:
Delphi-Quellcode:
if readline[i] in ['0'..'9'] then

Das klingt auch nett. Danke für den Tip!

DeddyH 13. Sep 2011 17:53

AW: String Problem
 
Wobei IN nur mit Mengen funktioniert, d.h. der Datentyp ist auf Byte-kompatible eingeschränkt.

Union 13. Sep 2011 19:36

AW: String Problem
 
readline ist kürzer als 34 Stellen. Du liest dann "hinter" dem String irgendwas, das dort im Speicher steht.
Mit diesem String geht es nicht:
Code:
readline := '33020AMT1x000000000x000000000x001';
mit diesem geht es
Code:
readline := '33020AMT1x000000000x000000000x001x';
Du solltest dein for umstellen auf:
Delphi-Quellcode:
      i := 11;
      while i <= 34 do
      begin
         if readline[i] in [#0, #32] then break;
         ATLN:=ATLN+readline[I];
         inc(i);
      end;
Und um so was rauszufinden, schliess Deine Funktion in {$R+} {$R-} ein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:22 Uhr.

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