Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Загрузка по маске


Автор: ZBEP 7.9.2011, 14:02
Здравствуйте!
Подскажите как можно загрузить/распределить текст вида:
Слова 1;Слова 2;Слова 3;
На три поля без цикла с Pos.
Например, если
Код

Edit1.text:='Слова 1;Слова 2;Слова 3;';

то
Код

Edit2.text:='Слова 1';
Edit3.text:='Слова 2';
Edit4.text:='Слова 3';

Просто думаю использование цикличного поиска не очень рационально.

Автор: AndreyIQ 7.9.2011, 14:18
Цитата(ZBEP @ 7.9.2011,  14:02)
Здравствуйте!
Подскажите как можно загрузить/распределить текст вида:
Слова 1;Слова 2;Слова 3;
На три поля без цикла с Pos.
Например, если
Код

Edit1.text:='Слова 1;Слова 2;Слова 3;';

то
Код

Edit2.text:='Слова 1';
Edit3.text:='Слова 2';
Edit4.text:='Слова 3';

Просто думаю использование цикличного поиска не очень рационально.

Если без Pos то по символьно сравнивать с шаблоном и разносить по полям.
или Copy, Delete

Автор: ZBEP 7.9.2011, 14:38
AndreyIQ, эти способы мало чем отличаются.
Я думал может есть что-то вроде такого:
Код

Edit1.text:='Слова 1;Слова 2;Слова 3;';
Edit2.text:=PosText(';',1);
Edit3.text:=PosText(';',2);
Edit4.text:=PosText(';',3);

Сейчас функция PosText у меня с помощью Pos ищет ';' и присваивает его заданному компоненту.
Просто подумал, что хоть все и работает, способ реализации не очень, вот и решил спросить, может есть что-то более удобное/правильное.

Автор: AndreyIQ 7.9.2011, 14:50
Цитата(ZBEP @ 7.9.2011,  14:38)
AndreyIQ, эти способы мало чем отличаются.
Я думал может есть что-то вроде такого:
Код

Edit1.text:='Слова 1;Слова 2;Слова 3;';
Edit2.text:=PosText(';',1);
Edit3.text:=PosText(';',2);
Edit4.text:=PosText(';',3);

Сейчас функция PosText у меня с помощью Pos ищет ';' и присваивает его заданному компоненту.
Просто подумал, что хоть все и работает, способ реализации не очень, вот и решил спросить, может есть что-то более удобное/правильное.

Думаю нет.
Есть извращенный метод, если у Вас они разделены ";", то сохранить текст как csv, открыть с помощью excel, а там уже они будут раскиданы по ячейкам smile  

Автор: Данкинг 7.9.2011, 14:52
Написать функцию для разбивки по разделителям. Кстати, обсуждалось неоднократно уже, поищи по GETWORDNUM.
Цитата(AndreyIQ @  7.9.2011,  15:50 Найти цитируемый пост)
Есть извращенный метод, если у Вас они разделены ";", то сохранить текст как csv, открыть с помощью excel, а там уже они будут раскиданы по ячейкам 

Да, это надо быть определённо запущенным извращенцем. smile 

Автор: ZBEP 7.9.2011, 14:52
AndreyIQ, Знаю, но нужно то у себя раскидать все smile
Ладно, спасибо, буду пользоваться старым методом smile

Автор: Данкинг 7.9.2011, 14:54
http://forum.vingrad.ru/index.php?showtopic=320768&view=findpost&p=2287028 хотя бы.

Автор: AndreyIQ 7.9.2011, 15:00
Цитата(Данкинг @ 7.9.2011,  14:54)
http://forum.vingrad.ru/index.php?showtopic=320768&view=findpost&p=2287028 хотя бы.

Помоему это не совсем то.

Автор: ZBEP 7.9.2011, 15:04
Еще хотел спросить, каким методом лучше пользоваться, по буквенным сравнением или Pos ?
Или без разницы?
Просто пока база не большая, не понятно, какой из способов быстрее.
Склоняюсь к Pos

Автор: AndreyIQ 7.9.2011, 15:11
Цитата(ZBEP @ 7.9.2011,  15:04)
Еще хотел спросить, каким методом лучше пользоваться, по буквенным сравнением или Pos ?
Или без разницы?
Просто пока база не большая, не понятно, какой из способов быстрее.
Склоняюсь к Pos

Я думаю лучше Pos.
Мне кажется он примерно так и работает.

Автор: superVad 7.9.2011, 15:12
http://forum.vingrad.ru/index.php?showtopic=325289&view=findpost&p=2319419.

Автор: ZBEP 7.9.2011, 15:20
superVad, Во!
Клас, спасибо!
Код

StringList.Delimiter := ';';

То, что нужно, думаю, такой вариант больше подходит, чем Pos и по буквенное сравнение.

Автор: sCreator 7.9.2011, 17:01
Только если заглянуть в SetDelimitedText - мы опять возвращаемся в посимвольному сравнению.

Автор: Данкинг 7.9.2011, 17:07
Цитата(AndreyIQ @  7.9.2011,  16:00 Найти цитируемый пост)
Помоему это не совсем то. 

А по-моему, это именно то. smile

Добавлено через 1 минуту и 13 секунд
Цитата(ZBEP @  7.9.2011,  16:04 Найти цитируемый пост)
Просто пока база не большая

А, так это даже база. Ну, я программу писал для экспорта из CSV в DBF, где строки парсятся как раз через GETWORDNUM.

Автор: sCreator 7.9.2011, 18:38
ИМХО
Если критична скорость и разделять по определенному символу ( ';' )
лучше взять за основу реализацию StringList.SetDelimitedText
Выкинуть из него лишнее и будет более-менее оптимальный по быстродействию

Работа с указателями всяк будет быстрее copy(slovo,i,1);

Автор: ZBEP 7.9.2011, 20:44
Понятно.
Всем, спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)