|
Вопрос # 1 538/ вопрос решён / |
|
Здравствуйте!
Есть текстовый файл, состоящий из строк примерно такого вида:
Привет=привет, как дела?
как сделать так, что бы искалась строка с текстом до "=", т.е " привет" , а в memo отображался текст после "=",
т.е "привет, как дела?"
Заранее спосибо
 |
Вопрос задал: Елагин Сергей (статус: Посетитель)
Вопрос отправлен: 30 апреля 2008, 17:20
Состояние вопроса: решён, ответов: 4.
|
Ответ #1. Отвечает эксперт: ANBsoft
Здравствуйте, Елагин Сергей!
Что-то примерно такое можно:
Procedure MyFind(FindStr:String);
Var f:TextFile;
s:String;
AssignFile(f,'FileName.ext');
Reset(f);
while not EOF(f) do begin
readln(f,s);
if Pos(FindStr+'=',s)=1 then
Memo1.Lines.Add(Copy(s,Length(FindStr)+2,Length(s)-Length(FindStr)-1);
end;
CloseFile(f);
End;
 |
Ответ отправил: ANBsoft (статус: Студент)
Время отправки: 30 апреля 2008, 18:42
Оценка за ответ: 5
Комментарий к оценке: Огромное спосибо. То, что мне нужно...
|
Ответ #2. Отвечает эксперт: Feniks
Здравствуйте, Елагин Сергей!
Если вам нужен файл для хранения неких параметров, то лучше сразу юзать ini файл. Для него есть уже два стандартных класса в Делфи. Посмотрите предыдущие Вопросы вопрос #1534 и вопрос #1531.
P.S. Желаю удачи.
 |
Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 30 апреля 2008, 18:50
Оценка за ответ: -1
|
Ответ #3. Отвечает эксперт: Вадим К
Здравствуйте, Елагин Сергей!
предлагаю "красивое решение".
procedure TForm3.Button1Click(Sender: TObject);
var sl:TStringList;
i:integer;
begin
memo1.clear;//почистим для приличия
sl := TStringList.create;
sl.loadfromfile('имяфайла');//загрузим с файла
sl.Add('test=qwerty');//или добавим туда что нибуть для теста
sl.Add('test2=qwer');
try
for i := 0 to sl.count - 1 do //пробегаемся по всем элементам
memo1.Lines.Add(sl.ValueFromIndex[i]); //и добавляем только значения.
finally
sl.Free; //прибираем за собой
end;
end;
Если же так случиться, что разделитель будет не равно, то это лечиться быстро. просто перед загрузкой данных в StringList добавим строку sl.NameValueSeparator := '|'; ну или какой там у вас разделитель.
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 30 апреля 2008, 22:12
Оценка за ответ: -1
|
Ответ #4. Отвечает эксперт: min@y™
Зря ты понаставил по -1 людям, которые ДЕЛО говорят!
Добавлю от себя: TStringList - это то, что тебе нужно. Смотри свойства TStringList.Names и TStringList.Values - самое оно!
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 2 мая 2008, 10:58
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 6; последнее сообщение — 3 мая 2008, 14:36; участников в обсуждении: 3.
|
Вадим К (статус: Академик), 1 мая 2008, 17:29 [#1]:
мда, человек не решил разобраться. чуточку не досмотрел, что надо "до" а не после.
а всего надо заменить
sl.ValueFromIndex[i]
sl.Names[i]
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Елагин Сергей (статус: Посетитель), 2 мая 2008, 12:22 [#2]:
Мне это дело нужно для ICQ бота. т.е есть файл, с приготвленными фразами, и когда приходит сообощение которое есть в файле( т.е до "=" ), и бот отвечает тем, что идёт после "="
Прости меня, я стал ничтожным прахом,
Холодный дождь смешал меня с землёй.
Нет больше боли, нет любви, нет страха.
Лишь только грусть осталась нам с тобой.....
|
|
Вадим К (статус: Академик), 2 мая 2008, 16:27 [#3]:
ну а если я скажу, что StringList уже предоставляет нужную функциональность (то есть поиск значения по ключу), мне прокоментируют оценку -1 и может поставят более корректную? Там всего одна строка
Галочка "подтверждения прочтения" - вселенское зло.
|
|
ANBsoft (статус: Студент), 3 мая 2008, 14:13 [#4]:
Данная функциональность есть не во всех версиях.
В Делфи 5 такого свойства нет, в Делфи 7 - есть.
|
|
ANBsoft (статус: Студент), 3 мая 2008, 14:25 [#5]:
К тому же приведенный текст выведет в мемо список всех идентификаторов после знака "=", не проверяя что стоит до "=".
|
|
ANBsoft (статус: Студент), 3 мая 2008, 14:36 [#6]:
Нужно было примерно так:
for i := 0 to sl.count - 1 do //пробегаемся по всем элементам
if sl.Names[i]='Искомый текст' then
memo1.Lines.Add(sl.ValueFromIndex[i]); //и добавляем только НУЖНЫЕ значения.
|
31 января 2011, 20:02: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|