AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

"." oder "," - Wie herausfinden?

Ein Thema von Overburn · begonnen am 29. Mai 2006 · letzter Beitrag vom 29. Mai 2006
Antwort Antwort
Overburn

Registriert seit: 12. Okt 2004
Ort: Bochum
47 Beiträge
 
#1

"." oder "," - Wie herausfinden?

  Alt 29. Mai 2006, 09:32
Moin moin,
ich hab folgnedes Problem:
Muss ein Programm schreiben, das Dateien mit einer bestetimmten Struktur einliest und grafisch ausgibt.
Das Problem ist aber:
Mal sind Kommzahlen in dieser Datei mit einen Punkt und mal mit einem Komma getrennt.
Also steht in einer Datei z.b.: "1.45" und in einer anderen "1,45".
Mein problem ist, das ich noch keine Lösung gefunden habe den "DecimalSeperator" dynamisch anzupassen.
Habt ihr da eine Idee?
Gruß,
Stefan
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: "." oder "," - Wie herausfinden?

  Alt 29. Mai 2006, 09:43
Guten Morgen,

liest Du die Zahlen als String ein?
Dann prüfe doch auf '.' und wenn ein Punkt vorhanden ist
ersetze ihn durch ein Komma.
Dazu kannst Du StringReplace verwenden.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#3

Re: "." oder "," - Wie herausfinden?

  Alt 29. Mai 2006, 10:20
Das Problem habe ich bei der Eingabeverarbeitung ständig.
Dafür habe ich dann eine kleine Routine, welche mir die Eingabe aus einem String aufbereitet.

Gruß Peter
Delphi-Quellcode:
Function ReadFloat(buf : String) : Extended;
var Konv : String;
    i,n : Integer;
Begin
 buf := Trim(buf);
 result:=0;
 n := length(Trim(buf));
 if n=0 then Exit;
 While (n > 0) and (buf[n]<>'.') and (buf[n]<>',') do dec(n);
 if n > 0 then buf[n] := DecimalSeparator;
 dec(n);
 While (n>0) do Begin
                 if (buf[n]='.') or (buf[n]=',') then buf[n]:=' ';
                 dec(n);
                end;

 konv:='';
 for i:=1 to length(buf) do
    if buf[i] in ['0'..'9',DecimalSeparator,'+','-'] then konv:=konv+buf[i];
 if length(Konv)=0 then Exit;
 try
  result:=strtofloat(Konv);
 except
  on E: EConvertError do result:=0;
 end;

end;
  Mit Zitat antworten Zitat
pszopp

Registriert seit: 7. Sep 2005
Ort: Alsdorf
95 Beiträge
 
Delphi 2010 Professional
 
#4

Re: "." oder "," - Wie herausfinden?

  Alt 29. Mai 2006, 10:30
Wie klappts damit?

Delphi-Quellcode:
function ConvertStr(const aStr : String) : Double;
var OldSep : Char;
begin
  try
    Result := StrToFloat(aStr);
  except
    OldSep := DecimalSeparator;
    if (OldSep = '.') then begin
      DecimalSeparator := ',';
    end
    else begin
      DecimalSeparator := '.';
    end;
    
    Result := StrToFloat(aStr);
    DecimalSeparator := OldSep;

  end; // try
end; // ConvertStr
Gruß,
pszopp
www.pstipp.de | Tippseite zur Formel 1 und Fußball WM/EM - kostenlos und Just-For-Fun
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: "." oder "," - Wie herausfinden?

  Alt 29. Mai 2006, 10:43
Hallo,

ich hätte da noch eine universell verwendbare Funktion anzubieten:

Delphi-Quellcode:
function Translate(const s, sOld, sNew: String): String;
var
  i, iPos, iLen: integer;
begin
  SetLength(Result, Length(s));
  iLen := 0;
  for i := 1 to Length(s) do
  begin
    iPos := Pos(s[i], sOld);
    if iPos > Length(sNew) then
      Continue;
    Inc(iLen);
    if iPos > 0
      then Result[iLen] := sNew[iPos]
      else Result[iLen] := s[i];
  end;
  SetLength(Result, iLen);
end;
Testen kann man so:

Delphi-Quellcode:
var
  ds, s: String;
  e: Extended;
begin
  ds := StringOfChar(DecimalSeparator, 2);
  s := '';
  while InputQuery('Check', 'Float', s) do
    if TryStrToFloat(Translate(s, '.,', ds), e)
      then ShowMessage(Format('%g', [e]))
      else ShowMessage('bad value');
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
Overburn

Registriert seit: 12. Okt 2004
Ort: Bochum
47 Beiträge
 
#6

Re: "." oder "," - Wie herausfinden?

  Alt 29. Mai 2006, 13:20
Moin!
Danke für eure Hilfe! :-)
Funktioniert alles wunderbar.

Gruß,
Overburn
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:37 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