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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 1 641

/ вопрос открыт /

Здравствуйте, эксперты!
У меня к вам такой вопрос: есть определенный текстовый файл,в котором содержится набор слов отделенных между собой пробелом. Как из этого файла считать N-ое слово и записать его в какую нибудь переменную? Код в приложении.

Приложение:
  1. procedure readinv (number: integer);
  2.  
  3. s, slovo: string;
  4. begin
  5. Assignfile(inv,path+'data'+Form2.Edit1.Text+'inventory.txt');
  6. delete(s,0,length(s));
  7. k:=0;
  8. i:=1;
  9. {$I+}
  10. reset(inv);
  11. {$I+}
  12. while not(EOF(inv)) do
  13. begin
  14. readln(inv,s);
  15. slovo:=slovo+s[i];
  16. if s[i]=' ' then
  17. begin
  18. inc(k);
  19. if k=number then
  20. begin
  21. if slovo='empty ' then
  22. ShowMessage ('Empty!');
  23. end;
  24. delete(slovo,0,length(slovo));
  25. delete(s,0,length(s));
  26. end
  27. else inc(i);
  28. end;
  29. closefile (inv);
  30. end;
  31.  
  32.  
  33. 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
  34. //------------------------------
  35.  


IlluminatI Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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

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

IlluminatI (статус: 2-ой класс), 3 июня 2008, 18:55 [#3]:

Ошибки все равно выскакивают!
Я не ас в программировании (пока)), может я не объявляю этот тип в Clases? Или он автоматически должен объявляться?
(если нет, подскажите плз где это)
Вадим К

Вадим К (статус: Академик), 3 июня 2008, 23:22 [#4]:

не надо объявлять тип Clases. Надо добавить в список uses юнит Classes. То есть, верхушка юнита должна выглядеть где то так
unit имяюнита;
 
interface
  uses Windows, ....,..., Classes,...,...;
если слова uses нет в файле - допишите.

А у вас точно делфи? или может TurboPascal?
Галочка "подтверждения прочтения" - вселенское зло.
IlluminatI

IlluminatI (статус: 2-ой класс), 4 июня 2008, 20:26 [#5]:

Уважаемый Вадим К. Спасибо большое, пойду пробовать, а делфи от Turbo Pascal я еще вроде способен отличить =))))
IlluminatI

IlluminatI (статус: 2-ой класс), 4 июня 2008, 21:08 [#6]:

Вадим К! Большое вам спасибо, дело было в том, что,
было: sl.delimeter а надо sl.delimIter;
вообщем синтаксическая ошибка :)
Вадим К

Вадим К (статус: Академик), 5 июня 2008, 10:03 [#7]:

вообще то здесь спасиба балами шуршит:)
Галочка "подтверждения прочтения" - вселенское зло.

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

Версия движка: 2.6+ (26.01.2011)
Текущее время: 13 декабря 2017, 19:48
Выполнено за 0.05 сек.
Рейтинг@Mail.ru