Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.08.2009, 09:49   #1
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию Значение в апострофах

В общем задача в следующем: перед нами имеется строка, скажем S, в которой содержится некоторое значение. Как мне проверить оно заключено в апострофы или нет? То есть функция, типа если S='''бла-бла''' то TRUE, иначе не TRUE. Входящие значения S могут быть любыми (то есть и пустая строка и пару тысяч символов запросто).
Я предлагаю решение: проверить крайние элементы, являются ли они апострофами. Имеется ли более красивое и главное более быстрое решение? Скорость в данном случае приоритетней.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 05.08.2009, 10:04   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Как по мне достаточно быстрым будет простой While до равно, потом до кавычки и следующей кавычки.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.08.2009, 10:09   #3
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Не кавычки, апострофы. Внутри строки также могут иметься апострофы (не только по краям). Строка может быть очень длинной (искать в цикле 1000 элементов все же накладно).
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 05.08.2009, 10:11   #4
Volt
Форумчанин
 
Аватар для Volt
 
Регистрация: 07.12.2008
Сообщений: 244
По умолчанию

Код:
function Stroka(S:String):Boolean ;
var a,b,c:string;
begin
a:= copy(s, 1, 1);
b:= copy(s, length(s), length(s)-1);
if pos('"', a)>0 then
begin
if pos('"', b)>0 then Result:=True else Result:=False;
end
else
Result:=False;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if Stroka('"Строка"') then Form1.Close;
end;
|̲̅̅●̲̅̅|̲̅̅=̲̅̅|̲̅̅●̲̅̅]
Volt вне форума Ответить с цитированием
Старый 05.08.2009, 10:13   #5
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Благодарю, Volt. Примерно также я и сделал, меня интересует: можно ли быстрей? Моя программа пресыщена цикличными операциями со строками, каждый такт для меня имеет большое значение.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 05.08.2009, 10:53   #6
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Код:
function Stroka(S:string):boolean;
begin
 result:=false;
 result:=(S[1]='"') and (S[Length(S)]='"');
end;
SERG1980 вне форума Ответить с цитированием
Старый 05.08.2009, 11:02   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Предлагаю так:
Код:
var s:string;k,i:integer;
begin
 s:='x="123+4+"5"+5"';
 for k:=1 to length(s) do if s[k]='"' then inc(i);
 if i mod 2=0 then ShowMessage('Правильно') else ShowMessage('неа');
end;
Учитываются все ковички
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.08.2009, 12:10   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от SERG1980 Посмотреть сообщение
Код:
function Stroka(S:string):boolean;
begin
 result:=false;
 result:=(S[1]='"') and (S[Length(S)]='"');
end;
А если S не содержит символов? Вы получите исключение.

Стилет речь идет об апострофах, но суть я уловил.
В общем это для парсера надо - он должен динамически определять что это за элемент - число, строка, массив, имя переменной и пр. Один из вариантов - это строка в апострофах (ну также как в паскале).
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 05.08.2009, 13:04   #9
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Код:
if S<>'' then result:=(S[1]='"') and (S[Length(S)]='"');
SERG1980 вне форума Ответить с цитированием
Старый 05.08.2009, 13:15   #10
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Еще одна проблемка . Введите 1 апостроф и функция даст верный результат...
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Значение в DBEdit artemavd БД в Delphi 1 15.05.2009 18:17
Вычислить значение Наталья111 Общие вопросы Delphi 17 25.12.2008 08:43
Значение DBLookupComboBox MARCH Компоненты Delphi 58 16.11.2008 20:45
значение из подстроки GazimagomedovM Помощь студентам 2 10.07.2008 08:50
среднее значение tonic Microsoft Office Excel 1 04.01.2008 00:20