![]() |
Laden und Speichern von Kommazahlen möglich?
Hallo,
ich habe ein Problem: Ich habe ein kleines Programm gebastelt, dass bestimmte werte in einer Textdatei speichert. Wenn ich diese Werte wieder laden möchte funktioniert das nur dann, wenn die Zahlen ganze Zahlen sind, also ohne Komma. Handelt es sich um Kommazahlen, dann gibt es eine Fehlermeldung "Project PorjektTest.exe raised exeption class EInOutError with message 'Invalid numeric input'. Process stopped. Use Step or Run to continue." Wenn ich in der Textdatei das Komma durch einen Punkt ersetze funktioniert es den Wert zu laden, sogar als Komma wird er ausgegeben. Allerdings kann ich Werte nicht als Zahl mit Punkt als Trennungszeichen eingeben, da sonst die Berechnungen nicht mehr funktionieren, weil das Programm auf Komma als Trennzeichen bei der Eingabe besteht. Wäre schön, wenn jemand einen Lösungsansatz für das Problem hätte. Achja ich benutze Delphi7. Gruß ein absoluter Delphineuling |
Re: Laden und Speichern von Kommazahlen möglich?
Hallo,
um Dir eine passende Empfehlung zu geben, benötigen wir Deinen bisherigen Code:
Jürgen |
Re: Laden und Speichern von Kommazahlen möglich?
Ich würde die Daten mit einem Punkt speichern, dann wäre das Auslesen wohl kein Problem mehr.
Einfach die Zahl in einen String umwandeln (machst du wahrscheinlich sowieso irgendwo) und dann z.B. so eine Funktion nutzen:
Delphi-Quellcode:
Die Funktion wandelt in dem String das Komma in einen Punkt um (ungetestet).
procedure umwandeln(var s : string);
var p : integer; begin p := Pos(',',s); if p > 0 then s[p] := '.'; end; P@Tti |
Re: Laden und Speichern von Kommazahlen möglich?
Also, ich würde eher eine typisierte Datei nehmen, dann entfällt die komplette Konvertierung.
|
Re: Laden und Speichern von Kommazahlen möglich?
Wie benutze ich denn eine typisierte Datei? Ist damit gemeint, dass ich eine Datei mit bestimmter Endung .Beispiel verwende?
Hier erstmal die Codeteile:
Delphi-Quellcode:
{------------------------------------------------------------------------------- Speicherung der Ein- und Ausgabewerte -------------------------------------------------------------------------------} procedure TFormPalettierung.Speichern1Click(Sender: TObject); var Datei : TextFile; begin //Eingabewerte if MessageDlg('Klicken Sie Ja, wenn Sie die Eingabewerte speichern möchten.', mtInformation,[mbYes,mbNo],0) = mrYes then begin if SaveDialog1.Execute then begin AssignFile(Datei,SaveDialog1.FileName); Rewrite(Datei); WriteLN(Datei,EditL.Text); WriteLN(Datei,EditB.Text); WriteLN(Datei,EditH.Text); WriteLN(Datei,EditM.Text); WriteLN(Datei,ComboBoxStandflaeche.itemindex); WriteLN(Datei,EditA.Text); WriteLN(Datei,ComboBoxPalette.itemindex); WriteLN(Datei,EditG.Text); WriteLN(Datei,EditGH.Text); WriteLN(Datei,EditPG.Text); WriteLN(Datei,EditN.Text); WriteLN(Datei,ComboBoxBlockstruktur.itemindex); WriteLN(Datei,EditSF.Text); CloseFile(Datei); end; end; // Ausgabewerte if MessageDlg('Klicken Sie Ja, wenn Sie die Ausgabewerte speichern möchten.', mtInformation,[mbYes,mbNo],0) = mrYes then begin if SaveDialog2.Execute then begin AssignFile(Datei,SaveDialog2.FileName); Rewrite(Datei); WriteLN(Datei,LabelAPL.Caption); WriteLN(Datei,LabelLagenP.Caption); WriteLN(Datei,LabelAnzahlP.Caption); WriteLN(Datei,LabelRest.Caption); WriteLN(Datei,LabelStapel.Caption); WriteLN(Datei,LabelStauch.Caption); CloseFile(Datei); end; end; end; {------------------------------------------------------------------------------- Laden der Ein- und Ausgabewerte -------------------------------------------------------------------------------} procedure TFormPalettierung.Laden1Click(Sender: TObject); var Datei: TextFile; x : Single; y : integer; Button : Integer; begin Button := Application.MessageBox('Klicken Sie OK, wenn Sie'#13#10'die Koordinaten einlesen möchten', 'Koordinaten einlesen', mb_OKCancel+mb_DefButton1); if Button = IDOK then begin if OpenDialog1.Execute then begin AssignFile(Datei,OpenDialog1.Filename); Reset (Datei); ReadLn(Datei,x); EditL.Text := FloatToStr(x); ReadLn(Datei,x); EditB.Text := FloatToStr(x); ReadLn(Datei,x); EditH.Text := FloatToStr(x); ReadLn(Datei,x); EditM.Text := FloatToStr(x); ReadLn(Datei,y); ComboBoxStandflaeche.itemindex := y; ReadLn(Datei,x); EditA.Text := FloatToStr(x); ReadLn(Datei,y); ComboBoxPalette.itemindex := y; ReadLn(Datei,x); EditG.Text := FloatToStr(x); ReadLn(Datei,x); EditGH.Text := FloatToStr(x); ReadLn(Datei,x); EditPG.Text := FloatToStr(x); ReadLn(Datei,x); EditN.Text := FloatToStr(x); ReadLn(Datei,y); ComboBoxBlockstruktur.itemindex := y; ReadLn(Datei,x); EditSF.Text := FloatToStr(x); //Kommazahl CloseFile(Datei); end; if OpenDialog2.Execute then begin AssignFile(Datei,OpenDialog2.Filename); Reset (Datei); ReadLn(Datei,x); LabelAPL.Caption := FloatToStr(x); ReadLn(Datei,x); LabelLagenP.Caption := FloatToStr(x); ReadLn(Datei,x); LabelAnzahlP.Caption := FloatToStr(x); ReadLn(Datei,x); LabelRest.Caption := FloatToStr(x); ReadLn(Datei,x); LabelStapel.Caption := FloatToStr(x); //Kommazahl ReadLn(Datei,x); LabelStauch.Caption := FloatToStr(x); //Kommazahl CloseFile(Datei); end; end; if Button = IDCANCEL then ShowMessage('Kein Wunsch zum Lesen.'); end; in sämtliche Edit-Felder werden nur Zahlen eingetragen kein Text. Bei Patties Code sehe ich leider nicht durch : / |
Re: Laden und Speichern von Kommazahlen möglich?
Eine typisierte Datei ist eine Datei, die Elemente eines bestimmten Typs aufnimmt (wer hätte das gedacht? :D ). Mal ein Beispiel:
Delphi-Quellcode:
Getippt und nicht getestet, aber alles Weitere zu Records und typisierten Dateien sollte sich in der Hilfe finden lassen.
type TMyRecord = record
einString: string[40]; eineInteger: integer; eineDouble: Double; end; const sFileName = 'C:\test.rec'; procedure TFormMain.btnSpeichernClick(Sender: TObject); var MyRec: TMyRecord; MyFile: file of TMyRecord; //das ist eine Deklaration einer typisierten Datei begin FillChar(MyRec,SizeOf(MyRec),#0); with MyRec do begin einString := 'String'; eineInteger := 123; eineDouble := 3.1415927; end; AssignFile(MyFile,sFileName); rewrite(MyFile); write(MyFile,MyRec); CloseFile(MyFile); end; procedure TFormMain.btnLesenClick(Sender: TObject); var MyRec: TMyRecord; MyFile: file of TMyRecord; begin if not FileExists(sFileName) then exit; FillChar(MyRec,SizeOf(MyRec),#0); AssignFile(MyFile,sFileName); Reset(MyFile); read(MyFile,MyRec); CloseFile(MyFile); ShowMessage('Daten:'+#13#10+MyRec.einString+#13#10+ inttostr(MyRec.eineInteger)+#13#10+ FloatToStr(MyRec.eineDouble)); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:06 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 by Thomas Breitkreuz