Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 538

Раздел: Delphi » Прочее
/ вопрос решён /

Здравствуйте!
Есть текстовый файл, состоящий из строк примерно такого вида:
Привет=привет, как дела?

как сделать так, что бы искалась строка с текстом до "=", т.е " привет" , а в 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

ANBsoft (статус: Студент), 3 мая 2008, 14:13 [#4]:

Данная функциональность есть не во всех версиях.
В Делфи 5 такого свойства нет, в Делфи 7 - есть.
ANBsoft

ANBsoft (статус: Студент), 3 мая 2008, 14:25 [#5]:

К тому же приведенный текст выведет в мемо список всех идентификаторов после знака "=", не проверяя что стоит до "=".
ANBsoft

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)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:47
Выполнено за 0.03 сек.