| 
| 
 | Вопрос # 1 641/ вопрос открыт / | 
 |  Здравствуйте, эксперты!У меня к вам такой вопрос: есть определенный текстовый файл,в котором содержится набор слов отделенных между собой пробелом. Как из этого файла считать N-ое слово и записать его в какую нибудь переменную? Код в приложении.
 Приложение:Переключить в обычный режим procedure readinv (number: integer);     s, slovo: string;begin Assignfile(inv,path+'data'+Form2.Edit1.Text+'inventory.txt'); delete(s,0,length(s)); k:=0; i:=1; {$I+} reset(inv); {$I+} while not(EOF(inv)) do  begin   readln(inv,s);   slovo:=slovo+s[i];   if s[i]=' ' then    begin     inc(k);     if k=number then      begin        if slovo='empty ' then         ShowMessage ('Empty!');      end;      delete(slovo,0,length(slovo));      delete(s,0,length(s));    end   else inc(i);  end;  closefile (inv);end;  empty empty empty empty apple empty empty empty empty empty empty empty empty empty empty empty
empty empty empty empty empty empty empty empty empty empty empty empty empty empty //------------------------------ 
|  |   Вопрос задал: IlluminatI (статус: 2-ой класс)Вопрос отправлен: 1 июня 2008, 16:06
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Вадим К Здравствуйте, IlluminatI!Посмотел на ваш код, какой то он странный. вот вам простенький, но функциональный код.
 
 var s:string;
sl:TStringList;
i:integer;
begin
  //загрузим в строку 
  sl:= TStringList.create;
  sl.loadfromfile('filename');
  s := '';
  for i:=0 to sl.count -1 do s:= s+ ' '+sl[i];
  sl.clear;
  //удалим лишние пробелы
  s := trim(s);
  while pos('  ', s) <> 0 do
    s := StringReplace(s,'  ',' ',[rfReplaceAll]);
  //Загрузим назад в список и разобъём по пробелу
  sl.delimeter := ' ';
  sl.delimetertext := s;
  //всё готово. теперь можно узнать кол-во слов - sl.count
  //или получить какое то слово - sl[номер]. Не забываем, что нумерация идет с нуля.
  //после юзанья не забываем удалить sl
  sl.free;
end;
|  | Ответ отправил: Вадим К (статус: Академик)Время отправки: 1 июня 2008, 17:28
 
 |  
 Мини-форум вопросаВсего сообщений: 7; последнее сообщение — 5 июня 2008, 10:03; участников в обсуждении: 2. 
|   | IlluminatI (статус: 2-ой класс), 1 июня 2008, 19:28 [#1]:Уважаемый Вадим К! Компилятор выдает ошибку на строках:
 
 sl.delimeter := ' ';
 sl.delimetertext := s;
 
 т.к я не знаю таких функций у строки, поэтому не могу опр. причину ошибки сам, просьба помочь.
 ошибки:
 [Error] PredatorEnginie.pas(113): Undeclared identifier: 'delimeter'
 [Error] PredatorEnginie.pas(114): Undeclared identifier: 'delimetertext'
 
 Может нужно подключить какие нибудь модули в uses?
 Заранее спасибо!
 |  
|   | Вадим К (статус: Академик), 1 июня 2008, 20:47 [#2]:sl - это не строка. А объект типа TStringList. этот тип объявлен в Classes.
 компилятор не должен ругнуться на этих строках.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | IlluminatI (статус: 2-ой класс), 3 июня 2008, 18:55 [#3]:Ошибки все равно выскакивают! Я не ас в программировании (пока)), может я не объявляю этот тип в Clases? Или он автоматически должен объявляться?
 (если нет, подскажите плз где это)
 |  
|   | Вадим К (статус: Академик), 3 июня 2008, 23:22 [#4]:не надо объявлять тип Clases. Надо добавить в список uses  юнит Classes. То есть, верхушка юнита должна выглядеть где то так 
 unit имяюнита;
 
interface
  uses Windows, ....,..., Classes,...,...;если слова uses нет в файле - допишите. 
 А у вас точно делфи? или может TurboPascal?
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | IlluminatI (статус: 2-ой класс), 4 июня 2008, 20:26 [#5]:Уважаемый Вадим К. Спасибо большое, пойду пробовать, а делфи от Turbo Pascal я еще вроде способен отличить =)))) |  
|   | IlluminatI (статус: 2-ой класс), 4 июня 2008, 21:08 [#6]:Вадим К! Большое вам спасибо, дело было в том, что, было: sl.delimeter а надо sl.delimIter;
 вообщем синтаксическая ошибка
   |  
|   | Вадим К (статус: Академик), 5 июня 2008, 10:03 [#7]:вообще то здесь спасиба балами шуршит   Галочка "подтверждения прочтения" - вселенское зло. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |