Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Incopatible types: 'String' and 'Char' [D5, Win2k]


Страницы:   1 2

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? Все прекрасно работает!


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо