[Gelöst] StrToInt(str[i]) bei Ziffern = EConvertError ?!?

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
mark332
Beiträge: 202
Registriert: Do 16. Mai 2013, 13:49
OS, Lazarus, FPC: Windows 10 H.P. (x64) / Ubuntu 14.04.X
CPU-Target: AMD Octacore 4.0GHz

[Gelöst] StrToInt(str[i]) bei Ziffern = EConvertError ?!?

Beitrag von mark332 »

Hi Leute, ich habe ein kleines Problem, dass ich irgendwie nicht gelöst bekomme... :oops:

Ich habe eine Liste von Ziffern, als String und muss in einer Function (z.B.) die dritte Ziffer heraussuchen und in einen Integer umwandeln, bei StrToInt bekomme ich da aber immer "EConvertError", was mache ich falsch ?!?

Code (nur ein Bsp ;) ):

Code: Alles auswählen

 
x := '456757473553328082347744'
for i:=0 to 24 do
 begin
   testInteger:= StrToInt(x[i])
 end
 
Ich hoffe (und denke), dass mir jemand helfen kann ;)

Mit freundlichen Grüßen,

mark332
Zuletzt geändert von mark332 am Mi 10. Jul 2013, 21:43, insgesamt 1-mal geändert.
------------------------------------------------------------
Warum gibt es hier eigentlich kein [SPOILER][/SPOILER] ?

Benutzeravatar
Ally
Beiträge: 282
Registriert: Do 11. Jun 2009, 09:25
OS, Lazarus, FPC: Win und Lazarus Stable release
CPU-Target: x64

Re: StrToInt(str[i]) bei Ziffern = EConvertError ?!? [HELP]

Beitrag von Ally »

Hallo mark332,

ich hab's nicht getestet aber 0 to 23 sollte gehen.

Gruß

g3sh
Beiträge: 21
Registriert: Mi 3. Jul 2013, 10:04

Re: StrToInt(str[i]) bei Ziffern = EConvertError ?!? [HELP]

Beitrag von g3sh »

Nein so geht das nicht. Die Indizierung eines Strings beginnt mit dem Index 1 und nicht bei 0. An der Stelle 0 wird so viel ich weiß die Länge des Strings gespeichert (oder wurde früher jedenfalls..).

So geht das ganze:

Code: Alles auswählen

 
  x := '456757473553328082347744'
  for i:=1 to length(x) do
  begin
    testInteger:= StrToInt(x[i])
  end;
 
Das die Indizierung bei 1 anfängt ist eine Ausnahme und nicht üblich in der Informatik, siehe dazu hier mehr http://www.delphi-treff.de/tutorials/ob ... arbeitung/

MfG

mark332
Beiträge: 202
Registriert: Do 16. Mai 2013, 13:49
OS, Lazarus, FPC: Windows 10 H.P. (x64) / Ubuntu 14.04.X
CPU-Target: AMD Octacore 4.0GHz

Re: StrToInt(str[i]) bei Ziffern = EConvertError ?!? [HELP]

Beitrag von mark332 »

Danke für eure Antworten, ich werde beides testen, sobald ich kann und mich dann zurückmelden :)


Edit, okay, das ganze hat funktioniert ;) Danke an g3sh

Leider habe ich jetzt ein neues Problem :oops:
Die funktion, für die ich das gebraucht habe, soll aus einem Zahlencode, die Ziffer der Stelle "i" heraussuchen, sie mit derselben Stelle eines zweiten Zahlencodes und 6 addieren, und dann den Buchstaben an Stelle "i" eines Strings mit dem Ergebnis ersetzen, mein Problem ist, dass alles geht (keine Fehlermeldung), aber die Buchstaben nicht ersetzt werden, sondern der String völlig gleich bleibt...

Code:

Code: Alles auswählen

 
function ReplaceViaCode(sChars, codeNum1, codeNum2: string): string;
var
  i: integer;
  rpLetter: integer;
begin
  Result := '';
  for i := 1 to (Length(codeNum1)) do //Length(codeNum1) ist immer 24, genauso, wie Length(codeNum2) ;)
    begin
       Form1.Memo_console.lines.add('Ursprung'+sChars);
       rpLetter := (StrToInt(codeNum1[i]) + StrToInt(codeNum2[i]) + 6);
       Form1.Memo_console.lines.add('Wert, des neues Buchstabens:'+IntToStr(rpLetter));
       Form1.Memo_console.lines.add(StringReplace(sChars, sChars[i], rpChars[rpLetter], [rfReplaceAll,rfIgnoreCase]));
       StringReplace(sChars, rpChars[i], rpChars[rpLetter], [rfReplaceAll,rfIgnoreCase]); //rpChars = 'abcdefghijklmnopqrstuvwxyz' ;)
   end;
 Form1.Memo_console.lines.add('Neuer Text:'+sChars);
 Result := sChars;
end;
 
Hat jemand evtl. eine Idee, warum StringReplace nicht ordentlich funktioniert :?:

MfG mark332

g3sh
Beiträge: 21
Registriert: Mi 3. Jul 2013, 10:04

Re: StrToInt(str[i]) bei Ziffern = EConvertError ?!? [HELP]

Beitrag von g3sh »

Wenn ich dich richtig verstanden habe, brauchst du hier gar kein Stringreplace.
So sollte es gehen:

Code: Alles auswählen

...
  sChars[i]:= IntToStr(rpLetter)[1];
...
 
MfG

mark332
Beiträge: 202
Registriert: Do 16. Mai 2013, 13:49
OS, Lazarus, FPC: Windows 10 H.P. (x64) / Ubuntu 14.04.X
CPU-Target: AMD Octacore 4.0GHz

Re: StrToInt(str[i]) bei Ziffern = EConvertError ?!? [HELP]

Beitrag von mark332 »

g3sh hat geschrieben:Wenn ich dich richtig verstanden habe, brauchst du hier gar kein Stringreplace.
So sollte es gehen:

Code: Alles auswählen

...
  sChars[i]:= IntToStr(rpLetter)[1];
...
 
MfG
?!? gemeint ist, dass wenn z.b. rpLetter=5 ist und i=1, dass alle 'a'-(Stelle 'i' im rpChars-String)-Buchstaben mit 'e'-(Stelle 5 im rpChars.String)-Buchstaben ersetzt werden.

Dafür brauche ich StringReplace, was aber irgendwie nicht ersetzen will...

MfG
mark332

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: StrToInt(str[i]) bei Ziffern = EConvertError ?!? [HELP]

Beitrag von Michl »

Stringreplace ist eine Function!

mit

Code: Alles auswählen

sChars:=StringReplace(sChars, rpChars[i], rpChars[rpLetter], [rfReplaceAll,rfIgnoreCase]);
//bzw.
Result:=StringReplace(sChars, rpChars[i], rpChars[rpLetter], [rfReplaceAll,rfIgnoreCase]); 
 
sollte es funktionieren!

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

mark332
Beiträge: 202
Registriert: Do 16. Mai 2013, 13:49
OS, Lazarus, FPC: Windows 10 H.P. (x64) / Ubuntu 14.04.X
CPU-Target: AMD Octacore 4.0GHz

Re: StrToInt(str[i]) bei Ziffern = EConvertError ?!? [HELP]

Beitrag von mark332 »

Michl hat geschrieben:Stringreplace ist eine Function!

mit

Code: Alles auswählen

sChars:=StringReplace(sChars, rpChars[i], rpChars[rpLetter], [rfReplaceAll,rfIgnoreCase]);
//bzw.
Result:=StringReplace(sChars, rpChars[i], rpChars[rpLetter], [rfReplaceAll,rfIgnoreCase]); 
 
sollte es funktionieren!

jup tut es ;) Danke
------------------------------------------------------------
Warum gibt es hier eigentlich kein [SPOILER][/SPOILER] ?

Antworten