![]() |
| ||
|
|
Новости |
Поиск |
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
Anatoly Podgoretsky (2004-11-19 21:01:00) [21]aliced © (19.11.04 20:51) [17]
Еще бы строка[индекс] требует присвоение символа, а '' не является символом.
aliced (2004-11-19 20:57:00) [22](Махает рукою) Бог с вами... Пошла я домой...
begin...end (2004-11-19 20:54:00) [23]
> [17] aliced © (19.11.04 20:51)
> ну, так что ж вы говорите, что его нет в хелпе, если ничем
> не отличается?
У Вас что-то со зрением. Я не говорил, что его нет в хелпе. Я говорил:
1) его нет в приведённом коде;
2) код из хелпа работает.
aliced (2004-11-19 20:51:00) [24]ну, так что ж вы говорите, что его нет в хелпе, если ничем не отличается? Один я скопировала со своего первого сообщения, а второй-с вашего примера...
--------------------
Короче, получилось у меня. В Опциях проекта в свойствах компилятора в syntax option убрала галочку из strict var-strings. так что теперь ошибка выдается только в третьей строке, а это уже неважно.
if not (_Name[i] in ['0','1','2','3','4','5','6','7','8','9',',']) then
_Name:=copy(_name,1,i-1)+''+copy(_name,i+1,length(_name));
// _Name[i]:='';
begin...end (2004-11-19 20:37:00) [25]
> [14] aliced © (19.11.04 20:35)
> Теперь пытаюсь сделать
> _Name:=format('%d',_Name);
> Получаю Incopatible types: 'Array' and 'String'... Бред
> какой-то...
И действительно - бред.
_Name:=format('%d', [_Name ]);
begin...end (2004-11-19 20:35:00) [26]
> [13] aliced © (19.11.04 20:32)
> Гм... А чем отличается
Ничем не отличается, а что?
aliced (2004-11-19 20:35:00) [27]Теперь пытаюсь сделать
_Name:=format('%d',_Name);
Получаю Incopatible types: 'Array' and 'String'... Бред какой-то...
aliced (2004-11-19 20:32:00) [28]Гм... А чем отличается
var S: string;
begin
S := ' 123.5';
{ Convert spaces to zeroes }
while Pos(' ', S) > 0 do
S[Pos(' ', S)] := '0';
end;
от
var S: string;
begin
S := ' 123.5';
{ Convert spaces to zeros }
while Pos(' ', S) > 0 do
S[Pos(' ', S)] := '0';
end;
? Только не говорите мне, что пустая строка имеет огромное влияние на работу программы ;)
begin...end (2004-11-19 20:27:00) [29]
> [11] aliced © (19.11.04 20:23)
> Набираете в справке "Pos function". В открывшемся окне сверху
> нажимете Example. И получаем тот пример, которого "в хелпе
> не обнаружилось"
Я говорил - в [4] не обнаружилось!
Набираю, нажимаю, получаю:
var S: string;
begin
S := ' 123.5';
{ Convert spaces to zeros }
while Pos(' ', S) > 0 do
S[Pos(' ', S)] := '0';
end;
И где такой код в [4]?
> "copy(_Name,i,1) можно заменить на _Name[i]". изначально
> так и было написано, а затем после выдачи компилятором вышеозначенной
> ошибки, уже начались извращения типа copy(_Name,i,1)
У Вас, наверное, ошибка в компиляторе.
aliced (2004-11-19 20:23:00) [30]""Примера из хелпа", указанного в aliced © (19.11.04 19:48), в коде [4] не обнаружилось. "Не может быть" - я говорил именно про "пример из хелпа"."
Набираете в справке "Pos function". В открывшемся окне сверху нажимете Example. И получаем тот пример, которого "в хелпе не обнаружилось"
Второе. "copy(_Name,i,1) можно заменить на _Name[i]". изначально так и было написано, а затем после выдачи компилятором вышеозначенной ошибки, уже начались извращения типа copy(_Name,i,1)
Третье, и главное. У меня есть проблема. Реальная. Я попросила помощи у знатоков, как говорится. После того, как поискала сначала в хелпе, учебниках и гугле. И мне просто обидно, что вместо того, чтобы помочь, вы начинаете говорить что такого не может быть!..
Мне без разницы, как будет решена эта проблема. Сейчас параллельно разбираю ф-ю Format. Может, подскажите что-нибудь другое. Но я не хочу вам доказывать, что то, что я пишу-правда. Мне просто смысла нет сидеть тут на работе в пятницу в пол-восьмого вечера одной и абсолютно трезвой, да еще придумывать какие-то сказки.
Anatoly Podgoretsky (2004-11-19 20:19:00) [31]_Name[i] in ['0','1','2','3','4','5','6','7','8','9',',']
begin...end (2004-11-19 20:13:00) [32]
> [6] begin...end © (19.11.04 20:08)
> "Не может быть" - я говорил именно про "пример из хелпа".
А, нет, извините, "не может быть" - это я говорил про _Name[Pos('.', _Name)] := ','. Но этого тоже чего-то в [4] не наблюдается.
Palladin (2004-11-19 20:12:00) [33]для особо одаренных, Copy возвращает String (!) а не Char (!)
begin...end (2004-11-19 20:09:00) [34]
> [5] aliced © (19.11.04 20:07)
Для того, чтобы в уже полученной строке заменить один символ на другой, не нужно разбирать и переделывать устройство.
begin...end (2004-11-19 20:08:00) [35]
> [4] aliced © (19.11.04 20:04)
"Примера из хелпа", указанного в aliced © (19.11.04 19:48), в коде [4] не обнаружилось. "Не может быть" - я говорил именно про "пример из хелпа".
Подсказка: copy(_Name,i,1)можно заменить на _Name[i].
aliced (2004-11-19 20:07:00) [36]И предварительно заменять разделитель на правильный (точку на запятую) НЕ МОГУ! Еще раз повторяю, эта строка возвращается с устройства, подключенного на СОМ-порт, и устройство я разбирать и переделывать не могу-слишком дорого стОит!)
aliced (2004-11-19 20:04:00) [37]ААААААА!!!! Я знаю, что не может! но происходит!!!!
Реальная процедура, сейчас компилятор выдает вышеозначенную ошибку на выделенной жирным строке:
procedure GetArtikul(_Port:integer; var _Artikul:integer; var _Name:string; var _Zena:real);
var i,p : integer;
begin
// i:=InitFPport(_Port,19200); //óæå
if i=-1 then
begin
ShowMessage('Îøèáêà ñâÿçè ñ àïïàðàòîì! GetArtikul');
exit;
end;
SetDecimals(2);
DelayForPrinter;
if _Artikul = 0 then
begin
exit;
end;
GetArticleInfo(0,PrinterResults,0,_Artikul);
_Name:=ri4;
p:=pos('.',_Name);
delete(_name,p,1);
insert(',',_name,p);
for i:=1 to length(_Name) do
begin
if not (copy(_Name,i,1) in ['0','1','2','3','4','5','6','7','8','9',',']) then
_Name:=copy(_name,1,i-1)+''+copy(_name,i+1,); //_Name[i]:='';
end;
if tm'' then _Artikul:=StrToInt(tm)
else _Artikul:=0;
if _Name'' then _Zena:=StrToFloat(_Name)
else _Zena:=0;
_Name:=ri3;
DelayForPrinter;
// CloseFPport();
end;
begin...end (2004-11-19 19:59:00) [38]
> aliced © (19.11.04 19:48)
> Incopatible types: 'String' and 'Char' получаю на такой
> строке
Так и должно быть.
> Хотя, впрочем, такой же результат дает
> _Name[Pos('.', _Name)] := ',';
Какой - такой же? Такая же ошибка? Не может быть.
> Пример из хелпа:
> тоже не работает!
Работает.
> А надо-то мне всего-то символьную строку преобразовать в
> число!
См. функции Format, FloatToStr и проч.
> Строка может содержать '.' вместо ','
Предварительно заменяйте в ней разделитель на правильный (DecimalSeparator), если это необходимо.
aliced (2004-11-19 19:56:00) [39]а зачем бы я писала! не работает!
Может, в настройках проекта чего-нибудь надо изменить?
GanibalLector (2004-11-19 19:54:00) [40]>тоже не работает!
Что за LOL? Все прекрасно работает!