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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.07.2015, 14:51   #11
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Цитата:
Сообщение от JUDAS Посмотреть сообщение
Советчик, не пиши никогда эту фразу.

Проверил на делфи 7, сменив универсальность кода с Tag1.Length на Length(Tag1)

Код:
implementation
uses StrUtils;

{$R *.dfm}


function Parse(const Tag1, Tag2, source: string): string;
var
  p, p2: Integer;
begin
  Result := '';
  p := PosEx(Tag1, source);

  p2 := PosEx(Tag2, source, p + Length(Tag1) + 1);
  if (p = 0) or (p2 = 0) then
    exit;
  if p2 > p then
    Result := (Copy(source, p + Length(Tag1), p2 - p - Length(Tag1)));
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  Caption := Parse('','дуб', 'столетний дуб');
end;
в заголовке "пустота"
Вопрос, в чём универсальность?
так ты задай правильные данные, речь идёт о тексте между тегов.
'' - это не тег, если ты видел там нет обработки на этот случай. так как функция вытаскивает между тегов

и еще проверять на d7 код, который написан на XE. чудные Вы...

Цитата:
Сообщение от ResourceSpace Посмотреть сообщение
Вообще-то не верно Запустил код автора на Д7, выдало "новаРАЗопятьДВАи того", почему-то без "с".
В Д7 подобных функций не встречал.
я говорил о своей функции, а не об автора...
для тех у кого d7, видео записать?)

Последний раз редактировалось Stilet; 11.07.2015 в 17:04.
ZuBy вне форума Ответить с цитированием
Старый 11.07.2015, 17:54   #12
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Профессионал, ты написал что твой код универсален.
Универсальность кода, судя по тому как его описал автор, должен
а) найти текст PosA вначале строки str и удалить его, если такой имеется
б) найти текст PosB в конце строки str и удалить его, если такой имеется
в) ничего не делать вначале текста если PosA не найден
г) ничего не делать в конце текста если PosB не найден

Теперь, я пользуюьс твоей "универсальной" функцией которую ты мне описываешь следующим хидером
Код:
function Parse(const Tag1, Tag2, source: string): string;
Tag1 строка, которая может принимать значения включая '' (emptystr) так же как и Tag2. Вопрос, что делает твоя универсальная функция, если у меня нет префиксного тега ?

>так ты задай правильные данные
Профессионал, запомни, не оконечный пользователь должен задавать правильные данные, а программист пишущий функцию должен проверить что ему впихивают на входе.
Грош цена такому программеру, который пишет библиотечную функцию и не проверяет входные параметры, а место для кода такого программера - вот тут http://www.govnokod.ru/
95% сбоев и ошибок приложений, находится в полу метрах от монитора

Последний раз редактировалось JUDAS; 11.07.2015 в 17:57.
JUDAS вне форума Ответить с цитированием
Старый 11.07.2015, 21:31   #13
Должно быть имя?
Пользователь
 
Регистрация: 11.04.2015
Сообщений: 68
По умолчанию

Цитата:
Сообщение от JUDAS Посмотреть сообщение
Профессионал, ты написал что твой код универсален.
Универсальность кода, судя по тому как его описал автор, должен
а) найти текст PosA вначале строки str и удалить его, если такой имеется
б) найти текст PosB в конце строки str и удалить его, если такой имеется
в) ничего не делать вначале текста если PosA не найден
г) ничего не делать в конце текста если PosB не найден
Да, всё верно! У меня всегда были проблемы с объяснением
Должно быть имя? вне форума Ответить с цитированием
Старый 12.07.2015, 10:07   #14
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

JUDAS, а теперь еще раз перечитай, что я написал
Цитата:
пользуюсь своей, она универсальна под любую платформу.
любая платформа это не Windows, есть понимание?
потому что в андроиде и ios(mac) строки начинаются с 0, а не как в Windows с 1.
и многие функции перебором, по символьная проверка строк или парсинг или удаление будут некорректны если не учитывать это правило
пример с перебором будет выглядеть так
Код:
for i := {$IFDEF MSWINDOWS}1{$ELSE}0{$ENDIF} to длина.строки do
а удаление процедурой Delete не изменилось, там удалять нужно с 1 не важно под какую платформу это пишется

Если интересно почитай, а потом уже пиши про универсальность платформ. ок?
ZuBy вне форума Ответить с цитированием
Старый 12.07.2015, 13:44   #15
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
в андроиде и ios(mac) строки начинаются с 0, а не как в Windows с 1.
Это как так? О_о Одно и то же Делфи, и разные образмеривания строк???
Доказы, пожалуйста, в студию.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.07.2015, 15:28   #16
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Чот не вкурю, функция извлекает кусок строки между подстроками PosA и PosB, так штоли?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось min@y™; 12.07.2015 в 15:45.
min@y™ вне форума Ответить с цитированием
Старый 12.07.2015, 23:21   #17
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Сообщение от JUDAS
Профессионал, ты написал что твой код универсален.
Универсальность кода, судя по тому как его описал автор, должен
а) найти текст PosA вначале строки str и удалить его, если такой имеется
б) найти текст PosB в конце строки str и удалить его, если такой имеется
в) ничего не делать вначале текста если PosA не найден
г) ничего не делать в конце текста если PosB не найден
Цитата:
Сообщение от Должно быть имя? Посмотреть сообщение
Да, всё верно! У меня всегда были проблемы с объяснением
Цитата:
и опять. Есть строка
смотриРАЗсмотриДВАсноваРАЗопятьДВАи тогоРАЗитогиДВАвсего
в качестве фильтра(строк отсечения) задаем
сначала ДВА
и в конце РАЗ !!!

Какой должен быть результат?
Цитата:
результат моей функции будет "снова"
что-то из двух неверно, либо набор правил, либо ответ на пример.
а именно правило (б)
смотриРАЗсмотриДВАсноваРАЗопятьДВАи тогоРАЗитогиДВАвсего
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 12.07.2015 в 23:25.
evg_m вне форума Ответить с цитированием
Старый 13.07.2015, 02:20   #18
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,786
По умолчанию

Когда я был маленьким, у меня тоже была бабушка... А еще я любил писать всякие свои функции, которые делали якобы то, что нельзя сделать стандартными функциями, и таскал их из проекта в проект.

А потом я вырос и понял, что мои представления об обработке строк были неверными. Сильно повлияло чтение исходников VCL и исходников хороших компонентов. С тех пор как-то не возникает желания писать универсальные строковые функции и таскать их из проекта в проект.
Vapaamies вне форума Ответить с цитированием
Старый 13.07.2015, 07:44   #19
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Это как так? О_о Одно и то же Делфи, и разные образмеривания строк???
Доказы, пожалуйста, в студию.
как тебе доказать? я привел пример с циклом for для строк.
можете почитать
ZuBy вне форума Ответить с цитированием
Старый 13.07.2015, 08:07   #20
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну теперь понятно, что ты имеешь ввиду. Однако это не значит что стринги в Делфи полюбому начинаются с нуля или типа того. Но это уже лирика, вдаваться в нее не буду.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Аналог функции strtok Леопольдовна Общие вопросы C/C++ 4 04.04.2013 22:00
Аналог функции fscanf (C++) Andrey_k Помощь студентам 7 10.03.2011 19:59
Аналог функции ЧИСТРАБДНИ Mint86 Microsoft Office Excel 16 14.05.2010 09:55
Аналог функции ЧИСТВНДОХ Mint86 Microsoft Office Excel 7 13.05.2010 08:41
аналог функции case redfield Microsoft Office Excel 3 05.05.2010 12:25