Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.25;
Скачать: CL | DM;

Вниз

замена , на .   Найти похожие ветки 

 
an-na2002   (2004-04-05 10:32) [0]

Я меняю в файле , на .
if DECIMALSEPARATOR<>"," then
s:=StringReplace(s,",",DECIMALSEPARATOR,[rfReplaceAll]);
if DECIMALSEPARATOR<>"." then
s:=StringReplace(s,".",DECIMALSEPARATOR,[rfReplaceAll]);
В результате отрезается дробная часть.
Что я делаю не так?


 
Fay ©   (2004-04-05 10:37) [1]

1)
 for i := 1 to Length(s) do
   if (s[i] = ".") or (s[i] = ",") then
     s[i] := DecimalSeparator;

2)
 >> В результате отрезается дробная часть.
 Это у кого она есть. 8) Покажи , что было и что стало.


 
an-na2002   (2004-04-05 12:45) [2]

Было
6.60000000000000E-0001 1,85985303423037E-0001
Стало
6.60000000000000E-0001 1.00000000000000E-0001


 
Fay ©   (2004-04-05 12:49) [3]

Теперь подумай головой. Мы не трогали символы отличные от "," и ".". Откуда нули?! Давай весь код.


 
an-na2002   (2004-04-06 16:20) [4]

Этого хватит?
while not Eof(Vf) do
   begin
      ReadLn(Vf,s);
       for i := 1 to Length(s) do
        if (s[i] = ".") or (s[i] = ",") then
      s[i] := DecimalSeparator;
   end;
  Reset (Vf);
   while not Eof(Vf) do
   begin
     if RadioButton1.Checked then begin
                                   read(Vf,w,t);
                                   w:=w;
                                   t:=t;
                                    writeln(Vff,w,t);
                                  end


 
KSergey ©   (2004-04-06 16:34) [5]

>  [2] an-na2002   (05.04.04 12:45)
> Было
> Стало

Было в s до замены или было в файле, а что сразу после чтения из него - никто не знает?


 
an-na2002   (2004-04-06 16:45) [6]

Вывожу s  в TEdit пишет ошибку "6.60000000000000E-0001 1,85985303423037E-0001" is not a volid floating point value


 
MU   (2004-04-06 16:58) [7]

while not Eof(Vf) do
  begin
     ReadLn(Vf,s);
      for i := 1 to Length(s) do
       if (s[i] = ".") or (s[i] = ",") then
     s[i] := DecimalSeparator;
  end;
А записывать обратно не надо?


 
an-na2002   (2004-04-06 17:10) [8]

А как запасать измененую строку на старое место, а старую строку стереть?


 
an-na2002   (2004-04-06 17:23) [9]

Делаю после s[i] := DecimalSeparator;
WriteLn(Vf,s);
Ничего не меняеться.


 
han_malign ©   (2004-04-06 17:36) [10]

Вообще при использовании встроенных функций Delphi(не SysUtils и WinApi), можете смело забить на DECIMALSEPARATOR. Изначально Pascal понимает только ".".
System.pas:
//function _ValExt( s: AnsiString; VAR code: Integer ) : Extended;
procedure _ValExt;
asm
..............................
@@dotExp:
     CMP     BL,"." - "0"
     JNE     @@exp
..............................


З.Ы. Для русских региональных установок DECIMALSEPARATOR = ",", по умолчанию, хотя System функции(Val, Read(Ln)/Write(Ln)(Text)) все равно хотят ".". DECIMALSEPARATOR влияет только SysUtils::TextToFloat и иже с ним...


 
an-na2002   (2004-04-06 18:53) [11]

А по проще нельзя?



Страницы: 1 вся ветка

Текущий архив: 2004.04.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.024 c
1-1081434681
hawkins
2004-04-08 18:31
2004.04.25
Помогите в разработке компонента


4-1071588254
Vasiliy
2003-12-16 18:24
2004.04.25
Как на время отключить только клавиатуру


11-1063797669
Vadim S
2003-09-17 15:21
2004.04.25
Application.


7-1077726643
SnapIn
2004-02-25 19:30
2004.04.25
Как можно получить серийный номер PC


14-1080125994
Тумар
2004-03-24 13:59
2004.04.25
1 апреля Кто-ниб пробывал так шутить