| 
| 
 | Вопрос # 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) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |