![]() |
String Problem
Code:
habe bei obigem Code das Problem das mir die showmessage alles was NACH der Variabel ATLN steht nicht mit ausgibt.
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; 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 |
AW: String Problem
Wie wäre es mit Berücksichtigung der Compilerwarnung das ein nicht initialisierte Variable verwendet wird?
|
AW: String Problem
Steht vielleicht ein #0 in ATLN?
|
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);
|
AW: String Problem
Zitat:
|
AW: String Problem
Code:
selbst mit Trim funktioniert es nicht ??? nach ATLN ist schluss
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; |
AW: String Problem
Ist readline überhaubt mit genug Zeichen gefüllt?
Schalte mal die Bereichsprüfung an, in den Projektoptionen. Zitat:
|
AW: String Problem
Zitat:
|
AW: String Problem
die readline ist immer genug gefüllt..
habe gerade festgestellt das es sporadisch mit
Code:
funktioniert aber nur sporadisch
Trim(ATLN);
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? |
AW: String Problem
|
AW: String Problem
Zitat:
Delphi-Quellcode:
oder so ähnlich
for i:=a to b do
if readln[i] in ['0'..'9'] then ATN:=ATN+readln[i] else ATN:=ATN+' '; Gruß K-H p.s. readln ist echt nicht so DER Name für eine Variable |
AW: String Problem
Delphi-Quellcode:
Ungetestet, sollte aber tun.
for I := 11 to 34 do
case readline[I] of ' ': break; '0'..'9': ATLN := ATLN+readline[I]; end; [edit] Zitat:
|
AW: String Problem
Zitat:
indem du nur 0-9 dort anhängst? |
AW: String Problem
Ich dachte mehr daran:
Delphi-Quellcode:
und richtig lesen kann ich auch nicht.
f:textfile;
assignfile(f:'myfile'); reset(f); readln(f,mystring); Gruß K-H |
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:
wer etwas eleganteres hat bitte nicht zögern
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; |
AW: String Problem
![]() |
AW: String Problem
Zitat:
Gruß K-H edith: der rote kasten hat Feierabend |
AW: String Problem
Zitat:
|
AW: String Problem
Es gibt auch nocht den IN-Parameter:
Delphi-Quellcode:
if readline[i] in ['0'..'9'] then
|
AW: String Problem
Zitat:
|
AW: String Problem
Wobei IN nur mit Mengen funktioniert, d.h. der Datentyp ist auf Byte-kompatible eingeschränkt.
|
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:
mit diesem geht es
readline := '33020AMT1x000000000x000000000x001';
Code:
Du solltest dein for umstellen auf:
readline := '33020AMT1x000000000x000000000x001x';
Delphi-Quellcode:
Und um so was rauszufinden, schliess Deine Funktion in {$R+} {$R-} ein.
i := 11;
while i <= 34 do begin if readline[i] in [#0, #32] then break; ATLN:=ATLN+readline[I]; inc(i); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:00 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