![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Incopatible types: 'String' and 'Char' [D5, Win2k]
aliced © (2004-11-19 19:48:00)Incopatible types: 'String' and 'Char' получаю на такой строке
if not
(copy(_Name,i,1) in ['0','1','2','3','4','5','6','7','8','9',',']) then
Хотя, впрочем, такой же результат дает
_Name[Pos('.', _Name)] := ',';
(_Name:string;)
Пример из хелпа:
var S: string;
begin
S := ' 123.5';
{ Convert spaces to zeroes }
while Pos(' ', S) > 0 do
S[Pos(' ', S)] := '0';
end;
тоже не работает!
А надо-то мне всего-то символьную строку преобразовать в число!
Строка может содержать '.' вместо ',', а может вообще содержать какие-то кракозябры (строку возвращает устройство на com-порту)
Delphi 5.5
KilkennyCat (2004-11-20 17:12:00) [1]
function FormatStr(Str: String, NumberDel : byte): String;
var
I: Integer;
b : byte;
begin
b := 1;
for I := Length(Str) downto 1 do
if (Str[I] in ['.', ',']) and (Str[I] <> DecimalSeparator) and (NumberDel = b)
then begin
Str[I] := DecimalSeparator;
inc(b);
end
else if not (Str[I] in ['0'..'9', DecimalSeparator])
then
Delete(Str, I, 1);
Result := Str
end.
с выбором нужной запятой... хотя, опять же, можно выбрать вторую, а их всего одна...
KilkennyCat (2004-11-20 17:05:00) [2]
> begin...end © (20.11.04 17:00) [38]
хе, я об этом тоже подумал... но потом, когда кнопку нажал :)
begin...end (2004-11-20 17:00:00) [3]
> [37] KilkennyCat © (20.11.04 16:57)
> и лишнего как не бывало
Откуда Вы знаете, какую запятую нужно оставить?
KilkennyCat (2004-11-20 16:57:00) [4]
> begin...end © (20.11.04 16:53) [36]
>
> > [33] aliced © (20.11.04 16:38)
>
> function FormatStr(Str: String): String;
> var
> I: Integer;
b: boolean
> begin
b := true;
> for I := Length(Str) downto 1 do
> if (Str[I] in ['.', ',']) and (Str[I] <> DecimalSeparator) and b
> then begin
> Str[I] := DecimalSeparator;
b := false;
end
> else if not (Str[I] in ['0'..'9', DecimalSeparator])
> then
> Delete(Str, I, 1);
> Result := Str
> end.
и лишнего как не бывало.
begin...end (2004-11-20 16:53:00) [5]
> [33] aliced © (20.11.04 16:38)
function FormatStr(Str: String): String;
var
I: Integer;
begin
for I := Length(Str) downto 1 do
if (Str[I] in ['.', ',']) and (Str[I] <> DecimalSeparator) then
Str[I] := DecimalSeparator
else if not (Str[I] in ['0'..'9', DecimalSeparator]) then
Delete(Str, I, 1);
Result := Str
end.
После этого необходимы, конечно, дополнительные проверки, а то вдруг там окажется две запятых подряд.
Anatoly Podgoretsky (2004-11-20 16:43:00) [6]aliced © (20.11.04 16:38) [33]
Вот это str:=trim(str); поместить перед for
kaZaNoVa (2004-11-20 16:41:00) [7]aliced © (20.11.04 16:38) [33]
Оксана, дай номер аськи :))
моя 1035000
aliced (2004-11-20 16:38:00) [8]Спасибо всем, вроде справилась. Хотя все равно странно как-то всё...
Получила ф-ю, которую делаю перед преобразованием в число
function FormatStr(str:string):string; //ïðåîáðàçóåò ñòðîêó äëÿ êîìàíäû StrToInt
var i:integer;
begin
str:=StringReplace(str,'.',',',[rfIgnoreCase]); // str[pos('.',str]:=',';
for i:=1 to length(str) do
begin
if not (str[i] in ['0','1','2','3','4','5','6','7','8','9',',']) then
str:=copy(str,1,i-1)+''+copy(str,i+1,length(str)); //str[i]:='';
end;
str:=trim(str);
if str='' then str:='0';
result:=str;
end;
Anatoly Podgoretsky (2004-11-20 16:22:00) [9]Именно так, хочет удалить не нужное и точку привести к запятой, но это только первый шаг, все равно после этого надо проверять что осталось - число ли или просто нечто похожее на число. Иди игнорировать полученную строку
begin...end (2004-11-20 16:17:00) [10]
> [29] KilkennyCat © (20.11.04 15:37)
> в данном случае, для замены пробелов на нули
Да не надо ей пробелы на нули заменять. Ей строковое представление числа нужно перевести в число. Её беспокоит, что в строке могут быть символы, отличные от '0'..'9' и DecimalSeparator. Так пусть удалит их оттуда и не мучается. Хотя, может быть, я не так что-то понял...
KilkennyCat (2004-11-20 15:49:00) [11]кроме того, если длина непосредсвенно числа всегда постоянна, то - RightStr()
и вроде бы, Trim тоже может помочь.
KilkennyCat (2004-11-20 15:37:00) [12]для замены чего-либо строчного можно использовать функцию StringReplace
в данном случае, для замены пробелов на нули:
StringReplace(_Name, ' ', '0', [rfReplaceAll]);
KilkennyCat (2004-11-20 15:25:00) [13]
> Юрий К (20.11.04 15:06) [27]
молодец!
Юрий К (2004-11-20 15:06:00) [14]Попробовал так:
b : Byte;
b := Byte(s[1]);
if not (b in [Ord('0')..Ord('9'),Ord(','),Ord('.')]) then
Anatoly Podgoretsky (2004-11-20 14:56:00) [15]Palladin © (20.11.04 14:52) [24]
Кому трагедия, а кому и нет :-)
Юрий К (20.11.04 14:52) [25]
А вот так не надо, сначала сам попробуй.
Юрий К (2004-11-20 14:52:00) [16]А если так
Byte b;
b = Ord(_name[i]);
if not (b in ['0'..'9',',','.']) then ...
Palladin (2004-11-20 14:52:00) [17]Какая трагедия
aliced (2004-11-20 14:32:00) [18]Конечно ж не на всех!
Если я вчера ушла, это не значит, что я сегодня не вернусь и не продолжу ;)
Anatoly Podgoretsky (2004-11-19 21:16:00) [19]begin...end © (19.11.04 21:04) [21]
Надеюсь, что не на всех :-)
begin...end (2004-11-19 21:04:00) [20]
> [20] Anatoly Podgoretsky © (19.11.04 21:01)
Бесполезно, на нас всех уже махнули. :-)