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

Вниз

Как преобразовать тип из   Найти похожие ветки 

 
Кен ©   (2003-07-14 01:19) [0]

Пишет : [Error] Unit1.pas(306): Incompatible types: "Set" and "String"
Как подправить строчку ?
ch1 := str1;


 
Юрий Зотов ©   (2003-07-14 01:23) [1]

Зависит от того, что такое ch1. Приведите объявление.


 
Marser ©   (2003-07-14 01:27) [2]

var
S:String;
i:integer;
St: set of Char;
begin
S:="Some String";
for i:=0 to length(S)
do St:=St+S[i]
end;


 
Юрий Зотов ©   (2003-07-14 01:40) [3]

Эх, Сергей... Ведь это та же самая несовместимость типов будет...
Уж тогда так:
St := [];
for i := 1 to Length(S) do Include(St, S[i])


 
Кен ©   (2003-07-14 02:22) [4]

А нельзя ли как нибудь без цикла ? Чтобы не загромождать программу по таким пустякам. Там что нибудь типа :
(S as set of Char) или Set of Char(S) или что нибудь в этом роде.


 
Кен ©   (2003-07-14 02:41) [5]

Написал функцию :

function StrToSetOfChar(Str: String):set of AnsiChar;
var
i : Integer;
begin
Result := [];
for i := 1 to Length(Str) do Include(Result, Str[i]);
end;

Не пашет. Пишет :
[Error] Unit1.pas(302): Identifier expected but "SET" found


 
Asteroid ©   (2003-07-14 02:47) [6]

type
TAnsiCharSet = set of AnsiChar;

function ...: TAnsiCharSet;


 
Германн ©   (2003-07-14 02:48) [7]

2 Кен © (14.07.03 02:22)
Увы, "как-нибудь без цикла" нельзя. Нет такой волшебной палочки у процессора.

2 Юрий Зотов © (14.07.03 01:40)
> Эх, Сергей... Ведь это та же самая несовместимость типов будет...

Если проигнорировать индексацию с нуля, и отсутсвтвие инициализации, то что там неверно? Имхо - вариант множество:=множество + элемент множества по своему результату эквивалентен результату процедуы Include. Или я чего-то не знаю?


 
Ihor Osov'yak ©   (2003-07-14 02:57) [8]


2 Германн © (14.07.03 02:48)

> множество:=множество + элемент множества

Неа..

множество:=множество + множество1;
множество1 может быть так: [элемент множества]

то есть
вместо for i:=0 to length(S) do St:=St+S[i]
можно for i:=1 to length(S) do St:=St+[S[i]];

Но, я думаю, код, предложеный ЮЗ будет более еффективным. Есть такое предчувствие. Не потому, что его ЮЗ предложил.. Для перевода предчувствия в убеждение нужно в отладчике по Ctrl_Alt_C смотреть, а мне сейчас влом..




 
Юрий Зотов ©   (2003-07-14 03:08) [9]

> Германн © (14.07.03 02:48
Вариант
множество:=множество + элемент множества
есть синтаксическая ошибка. Правильно так:
множество:=множество + множество
Но Include действительно лучше.


 
Кен ©   (2003-07-14 03:27) [10]

Ещё вопрос, хотя может не очень в тему.

Какая разницам между :

type
TString=type AnsiString;

function qwer( var Text: TString): Integer;
function qwer( Text: TString): Integer;

Как отличаются вызовы этих функций ?
С var у меня почему то проблемы.


 
Германн ©   (2003-07-14 03:33) [11]

2 Ihor Osov"yak © (14.07.03 02:57)
2 Юрий Зотов © (14.07.03 03:08)
Осознал свою ошибку. Готов прилюдно посыпать свою голову пеплом :((
Утешает лишь одно, вышеуказанную давно следут помыть, но не представлялось случая :))


 
Marser ©   (2003-07-14 09:16) [12]

Черт, побери! Вспомнил за завтраком, чего я тут наваял, так даже десть не смог. Видимо уж после полуночи можно только в Потрепаться общаться. Исправляю
var
S:String;
i:integer;
St: set of Char;
begin
S:="Some String";
for i:=0 to length(S)-1
do St:=St+[S[i]] //или же include, как здесь советовали
end;

Кен, очень прошу прощения! И вы, Юрий, извините!


 
Юрий Зотов ©   (2003-07-14 09:40) [13]

> Кен © (14.07.03 03:27)
> Как отличаются вызовы этих функций?

В первую можно передавать ТОЛЬКО переменную, во вторую - любую строку типа TString.


 
Кен ©   (2003-07-15 02:07) [14]

> Юрий Зотов © (14.07.03 09:40)
> > Кен © (14.07.03 03:27)
> > Как отличаются вызовы этих функций?
>
> В первую можно передавать ТОЛЬКО переменную, во вторую -
> любую строку типа TString.

А как прописать, что это ТОЛЬКО переменная.
Допустим есть вариант :

var
Value: Variant;

Как с ним вызвать функцию :
function qwer( var Text: TString): Integer;

..
i := qwer((Value as {что-то?}));


 
Юрий Зотов ©   (2003-07-15 04:33) [15]

> А как прописать, что это ТОЛЬКО переменная

Естественно, так:
i := qwer((Value as TString Only);

Правда, есть маленькое "но"- для этого придется написать свой компилятор.



 
Кен ©   (2003-07-15 05:08) [16]

Пишет

[Error] Unit1.pas(512): Operator not applicable to this operand type


 
Кен ©   (2003-07-15 05:21) [17]

Если я явно задаю :
Value := TString("asdf");
То значит там должен быть стринг и ничего больше.
Почему же функция тогда не вызывается ? Что же ей ещё то надо указать, чтоб заработало ?


 
Юрий Зотов ©   (2003-07-15 05:33) [18]

Ответ уже был - ей надо указать свой компилятор.

Есть, правда, еще вариант - открыть книжку по языку и в ней прочитать:
- о том, что такое тип "множество";
- о том, что такое тип "длинная строка";
- о том, что такое тип "Variant";
- о совместимости типов данных;
- о передаче параметров по ссылке и по значению.

А еще лучше - просто эту книжку прочитать. Всю.


 
Кен ©   (2003-07-15 06:24) [19]

> Юрий Зотов © (15.07.03 05:33)
> А еще лучше - просто эту книжку прочитать. Всю.

Универсальный ответ на все вопросы форума. Причём чтобы его давать не обязательно знать ни Дельфи, ни языки программирования, ни вообще ничего кроме этой фурмулировки. Такой ответ способен дать даже полный идиот.


 
Юрий Зотов ©   (2003-07-15 06:35) [20]

> Кен © (15.07.03 06:24)

Не совсем точно. Это универсальный ответ на все ВАШИ вопросы форума.

Причём чтобы его давать, нужно все-таки знать и Delphi, и языки программирования, и еще кое-что. Для того, чтобы по "фурмулировке" вопроса понять, что все другие ответы просто бесполезны.

Потому что задавать ТАКИЕ вопросы в ТАКОМ количестве, несмотря на РЕГУЛЯРНО получаемые ответы "прочти хоть одну книгу" действительно способен только полный идиот.


 
Кен ©   (2003-07-15 06:57) [21]

> Юрий Зотов © (15.07.03 06:35)
> Для того, чтобы по "фурмулировке" вопроса понять, что все
> другие ответы просто бесполезны.


Это таким как вы непонятны форумлировки.

Вы пишете :
> Юрий Зотов © (14.07.03 01:23)
> Зависит от того, что такое ch1. Приведите объявление.


Вон Marser © (14.07.03 01:27) не спрашивал какое объвление. Потому, что ему и так ясно о чём речь. Ему ясно, мне ясно и массе других тоже ясно. А вот вам неясно. Что же это вам не ясно то, а ? Проблемы какие то с пониманием ?

Сколько вы ещё раз будете повторять свои "советы" про почитать книжки ? Всё, что можете сказать по теме ? Или пластинку заело ?

Короче отстаньте. Надоели.


 
Anatoly Podgoretsky ©   (2003-07-15 07:15) [22]

Кен © (15.07.03 06:24)
Да это универсальный и единственно возможный ответ в твоем случае, проблема состоит только в тебе, ты никак не хочешь или не можешь ему последовать, а вот бочку катить так мастер.

Насчет полного идиота я не согласен, полный идиот уже бы прочитал и стал не совсем полным. Это какая то другая более высокая стадия.


 
Юрий Зотов ©   (2003-07-15 07:39) [23]

> Кен © (15.07.03 06:57)

Привожу примеры возможных объявлений ch1 в точном соответствии с формулировкой вопроса:
- set of byte
- set of char
- [0..9]
- ["a", "A"]

И все эти варианты разные. И возможен еще миллион других. И в вопросе не сказано, что такое ch1. А решение как раз от этого и зависит. А Marser дал ответ только для одного варианта из миллиона возможных. Правда, сделав в 8 строчках 3 ошибки.

Так что проблемы с пониманием как раз не у меня, а у Вас. О чем, кстати, свидетельствуют все Ваши вопросы во всех форумах.

Сначала я честно Вам отвечал, причем совершенно точно, уж будьте уверены. Но... каждый ответ порождал только новые вопросы. И каждый вопрос свидетельсвовал о полном незнании и непонимании элементарнейшей азбуки. Наконец Вам дали тот совет, который и нужно было дать с самого начала - "читайте книжки". Жаль, но реакция Ваша была реакцией воинствующего невежды. Коим Вы, значит, и являетесь.

Не хотите прочесть хотя бы одну книгу - дело Ваше. Можете оставаться этим самым воинствующим невеждой и продолжать бомбить форум глупыми вопросами. Это Ваше право. Но уж тогда не удивляйтесь (и не возмущайтесь), если и ответы на них будут соответствующими.


 
Кен ©   (2003-07-15 08:06) [24]

> Юрий Зотов © (15.07.03 07:39)
> > Кен © (15.07.03 06:57)
>
> Привожу примеры возможных объявлений ch1 в точном соответствии
> с формулировкой вопроса:
> - set of byte
> - set of char
> - [0..9]
> - ["a", "A"]



Формулировка вопроса :
Как преобразовать тип из "String" в "set of AnsiChar" ?


 
Anatoly Podgoretsky ©   (2003-07-15 09:09) [25]

Читаем вдумчиво выше написанное. Если не поможет читаем два, три, более раз. Или ставим нормально вопрос, с четким объяснением хода мысли. Или читаем книгу.



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

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

Наверх




Память: 0.53 MB
Время: 0.012 c
7-91931
HeWSter
2003-04-16 07:09
2003.07.28
Как отследить DiskChange в ДОСе?


14-91815
Ihor Osov'yak
2003-07-13 00:01
2003.07.28
Опять вируса шлют


3-91673
Quest
2003-07-03 09:48
2003.07.28
Excel -> ADO(Jet.OLEDB.4) -> AdoDataSet


4-91957
NoName
2003-05-23 18:48
2003.07.28
Как использовать SetFileTime?


1-91749
Silver_
2003-07-15 11:48
2003.07.28
Замучал Free report Error