[gelöst]EconvertError invalid integer

Für Fragen von Einsteigern und Programmieranfängern...

[gelöst]EconvertError invalid integer

Beitragvon Aliobaba » 11. Apr 2018, 16:16 [gelöst]EconvertError invalid integer

Hallo,
ich stehe momentan völlig hilflos meinen Programmierhobby gegenüber und weiß absolut keinen Rat mehr. Ich hoffe, es kann mir hier jemand helfen.

Ich habe ein Programm, das ich mit meinem Linux-Rechner schreibe und das ich unter "VMWare" gleichzeitig für Windows kompiliere. Jahrelang ging das relativ gut – und nun tritt plötzlich ein Fehler auf, den ich mir absolut nicht erklären kann, zumal der identische Programmcode unter Linux problemlos läuft, unter Windows aber ein Fehler auftritt:

Der Code-Abschnitt, bei dem der Fehler passiert:
Bild7.png
Die Zeilen ab 1618 sind der ursprüngliche Code, bei dem die Fehler auftreten; die Zeilen ab 1597 sind die Folge meiner hilflosen Sucherei.

Die Fehlermeldung:
Bild4.png

Die Variablendefinition (für meine Fehlersuche),
Bild6.png

In der Listbox sind bei Item[0] die Zahl 30, bei Item[1] die Zahl 100 und bei Item[2] die Zahl 200, jeweils als String gespeichert.
Der Showmessage Befehl zeigt den korrekten Inhalt der entsprechenden Variablen:
Bild1.png
Der "StrtoInt" Befehl liefert nun die genannte Fehlermeldung, was ich aber absolut nicht verstehen kann, denn "30" ist doch ein String-Ausdruck, der jedenfalls problemlos in eine Integer-Variable zu überführen sein sollte.
Und was weiter seltsam ist:
1. Unter Linux klappt dies alles, unter Windows nicht
2. Bis vor kurzer Zeit klappte es ebenfalls unter Windows, jetzt plötzlich nicht mehr.

Jemand eine Idee, warum so ein Phänomen auftreten kann?? Wo liegt mein Fehler?

Aliobaba
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Aliobaba am 12. Apr 2018, 15:56, insgesamt 1-mal geändert.
Mein Lazarus-Lieblingsprojekt: "MyMemoryDB" ( http://www.mymemorydb.n-bay.de/ )
Aliobaba
 
Beiträge: 328
Registriert: 1. Mai 2012, 08:11

Beitragvon Aliobaba » 11. Apr 2018, 18:50 Re: EconvertError invalid integer

Hallo,

ich bin mittlerweile mit meiner Fehleranalyse einen kleinen Schritt weiter gekommen:

Bild_010.png
Wenn ich der Stringvariable "sl" direkt durch die obige geänderte Programmzeile die Zahl 30 übergebe, dann funktioniert mein Programm wieder wie gewohnt.
Für mich konzentriert sich daher das Problem auf die Frage:
Warum ist die Stringvariable "Listbx.Items[0]" , die ja auch mit "30" gefüllt ist, wie mir "ShowMessage" und auch die Fehlermeldung zeigt, ein "anderes" "30" als die "30", die ich direkt per Programm an die Variable "sl" übergebe??

Any ideas?
Aliobaba
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Mein Lazarus-Lieblingsprojekt: "MyMemoryDB" ( http://www.mymemorydb.n-bay.de/ )
Aliobaba
 
Beiträge: 328
Registriert: 1. Mai 2012, 08:11

Beitragvon mse » 11. Apr 2018, 18:57 Re: EconvertError invalid integer

Was zeigt length(s1)?
mse
 
Beiträge: 1933
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon siro » 11. Apr 2018, 19:07 Re: EconvertError invalid integer

gibt mal
Code: Alles auswählen
  ShowMessage('*'+ListBx.Items[0]+'*'); 

aus,
evtl hängt da hinten oder vorn ein Space dran, dann kommt nämlich der Konvertierungsfehler, zumindest bei Windows.
Die Sternchen begrenzen jetzt den String, da sollte also *30* angezeigt werden.

Siro
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
siro
 
Beiträge: 292
Registriert: 23. Aug 2016, 13:25
Wohnort: Berlin
OS, Lazarus, FPC: Windows 7 Windows 8.1 Windows 10 | 
CPU-Target: 64Bit
Nach oben

Beitragvon Aliobaba » 11. Apr 2018, 22:33 Re: EconvertError invalid integer

Danke, dass ihr Euch Gedanken macht.

Es bleibt mysteriös:
Der Code:
Bild_011.png
Die Sternchen kommen richtig. Es steht wirklich nur die "30" in der Variablen "Listbx.Items[0]"
Bild_012.png
Bild_013.png
Trotzdem die Fehlermeldung ???? :(
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Mein Lazarus-Lieblingsprojekt: "MyMemoryDB" ( http://www.mymemorydb.n-bay.de/ )
Aliobaba
 
Beiträge: 328
Registriert: 1. Mai 2012, 08:11

Beitragvon mse » 12. Apr 2018, 07:28 Re: EconvertError invalid integer

Was zeigt length(s1)?
mse
 
Beiträge: 1933
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon Aliobaba » 12. Apr 2018, 10:04 Re: EconvertError invalid integer

Hallo "mse",

der Code:
Bild_022.png

das Ergebnis:
Bild_021.png

Die Fehlermeldung bleibt identisch wie schon gezeigt. Schon recht interessant, dass der String "30" ein Länge von 5 aufweist. :shock:
Danke für Deine beharrliche Nachfrage!
Woher kommt das? :cry: :roll:

Aliobaba
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Mein Lazarus-Lieblingsprojekt: "MyMemoryDB" ( http://www.mymemorydb.n-bay.de/ )
Aliobaba
 
Beiträge: 328
Registriert: 1. Mai 2012, 08:11

Beitragvon mse » 12. Apr 2018, 10:13 Re: EconvertError invalid integer

Mach mal
Code: Alles auswählen
 
var
 i1: int32;
[...]
 writeln('------');
 for i1:= 1 to length(s1) do begin
  writeln(ord(s1[i1]));
 end;
 writeln('------');
 

Woher kommt das? :cry: :roll:

Vielleicht kommt dir eine Idee wenn du die Werte siehst.
mse
 
Beiträge: 1933
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon Aliobaba » 12. Apr 2018, 10:50 Re: EconvertError invalid integer

Danke!
Bild_023.png
(Habe Deinen Code geringfügig angepasst, damit er bei mir auf dem Bildschirm erscheint.
Diese Idee hatte ich schon; da stecken noch Steuerzeichen(?), jedenfalls in Textdarstellung nicht sichtbare Zeichen drin.
(239,187,191,51,48) Die letzten beiden entsprechen der "30".

Trotzdem!
Warum kommen die plötzlich da in die Variable rein?
Die Variablen sind in einer ListBox gespeichert. Und werden von dieser auf die Festplatte geschrieben bzw. von da wieder eingelesen.
Und warum stört dies das "Linux-Kompilat" nicht, das "Windows-Kompilat" aber schon?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Mein Lazarus-Lieblingsprojekt: "MyMemoryDB" ( http://www.mymemorydb.n-bay.de/ )
Aliobaba
 
Beiträge: 328
Registriert: 1. Mai 2012, 08:11

Beitragvon m.fuchs » 12. Apr 2018, 11:01 Re: EconvertError invalid integer

Aliobaba hat geschrieben:Die Variablen sind in einer ListBox gespeichert. Und werden von dieser auf die Festplatte geschrieben bzw. von da wieder eingelesen.

<Ironie>Klasse, schön dass du das Detail mit dem Speichern jetzt schon schreibst. </Ironie>

Aliobaba hat geschrieben:Warum kommen die plötzlich da in die Variable rein?

Weil du die Daten auf die Fetsplatte schreibst und dann wieder ausliest. Das ist eine BOM.

Aliobaba hat geschrieben:Und warum stört dies das "Linux-Kompilat" nicht, das "Windows-Kompilat" aber schon?

Kommen die Werte unter Linux aus der selben Datei?
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
m.fuchs
 
Beiträge: 1946
Registriert: 22. Sep 2006, 18:32
Wohnort: Berlin
OS, Lazarus, FPC: Winux (L 1.8.4, FPC 3.0.4) | 
CPU-Target: x86, x64, arm
Nach oben

Beitragvon wp_xyz » 12. Apr 2018, 11:25 Re: EconvertError invalid integer

Ja, der Teilstring #239#187#191 = #$EF#$BB#$FB ist der BOM (Byte order marker) für UTF8. Aber ich war immer der Meinung dass Lazarus keinen BOM schreibt. Wie hast du denn die Listbox-Strings auf die Platte geschrieben?
wp_xyz
 
Beiträge: 2531
Registriert: 8. Apr 2011, 08:01

Beitragvon Aliobaba » 12. Apr 2018, 11:47 Re: EconvertError invalid integer

Danke für die Antworten!
Vielleicht haltet ihr mir zugute, dass ich meine Frage in den Bereich "Einsteigerfragen" geschrieben habe.
Von "BOM" habe ich jedenfalls noch nie etwas gehört. Aber das erklärt jetzt vielleicht auch, warum nur der erste Eintrag der Liste von dem Fehler betroffen war :idea:

Geschrieben habe ich das File aber stets mit "Lazarus-eigenen Mitteln":
Code: Alles auswählen
Form1.ListBx.Items.LoadFromFile(Form_DB_wechseln.Ed_Pfad_zu_InitTxt.Text);
Form1.ListBx.Items.SavetoFile(Form_DB_wechseln.Ed_Pfad_zu_InitTxt.Text);
 

Aber es könnte durchaus sein, dass ich das File mal mit einem Explorer (Dolphin->Editor) geöffnet, verändert und wieder zurück geschrieben habe.
Die Werte unter Linux und unter Windows kommen (manchmal) aus derselben Datei.

Vielen Dank jetzt aber schon mal für die geduldigen Antworten. Wieder was gelernt!!

Aliobaba
Mein Lazarus-Lieblingsprojekt: "MyMemoryDB" ( http://www.mymemorydb.n-bay.de/ )
Aliobaba
 
Beiträge: 328
Registriert: 1. Mai 2012, 08:11

Beitragvon wp_xyz » 12. Apr 2018, 12:16 Re: EconvertError invalid integer

Aliobaba hat geschrieben:Geschrieben habe ich das File aber stets mit "Lazarus-eigenen Mitteln":
Code: Alles auswählen
Form1.ListBx.Items.LoadFromFile(Form_DB_wechseln.Ed_Pfad_zu_InitTxt.Text);
Form1.ListBx.Items.SavetoFile(Form_DB_wechseln.Ed_Pfad_zu_InitTxt.Text);
 

Aber es könnte durchaus sein, dass ich das File mal mit einem Explorer (Dolphin->Editor) geöffnet, verändert und wieder zurück geschrieben habe.

Das wird's sein...

Wenn wie hier die Möglichkeit besteht, dass eine Datei verschiedene Kodierungen haben kann, solltest du beim Einlesen Routinen der Unit lConvEncoding verwenden:
Code: Alles auswählen
ues
  LConvEncoding;
var
  L: TStrings;
...
  L := TStringList.Create;
  try
    L.LoadFromFile(Form_DB_wechseln.Ed_Pfad_zu_InitTxt.Text);
    s := L.Text;
    s := ConvertEncoding(s, GuessEncoding(s), encodingUTF8);
    ListBx.Items.Text := s;   
    //Form1.ListBx.Items.Text := s;   
    // ACHTUNG: Wenn diese Routine innerhalb einer Methode von TForm1 aufgerufen wird, sollte hier Form1 nicht stehen !!!
  finally
    L.Free;
  end;
wp_xyz
 
Beiträge: 2531
Registriert: 8. Apr 2011, 08:01

Beitragvon Aliobaba » 12. Apr 2018, 15:55 Re: EconvertError invalid integer

Klasse!!!! Und Danke!!!!! :) :) :)

Bild_031.png

... und schon besteht der String "30" nur noch aus 2 Zeichen - und alles funktioniert!!

Bild_030.png

Ich habe eine Menge gelernt!!
Vielen, vielen Dank !!
Aliobaba
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Mein Lazarus-Lieblingsprojekt: "MyMemoryDB" ( http://www.mymemorydb.n-bay.de/ )
Aliobaba
 
Beiträge: 328
Registriert: 1. Mai 2012, 08:11

• Themenende •

Zurück zu Einsteigerfragen



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste

porpoises-institution
accuracy-worried