Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2010, 20:37   #1
bicdibus
Пользователь
 
Регистрация: 19.03.2010
Сообщений: 14
Вопрос прочитать слово из тескстового файла

как прочитатьть одно слово изтекстового(тхт) файла,желательно случайное.
bicdibus вне форума Ответить с цитированием
Старый 27.03.2010, 20:46   #2
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

Грузите в файл, рандомно через Pos получаете позицию, допустим большой буквы или пробела, ищите через PosEx слудеющий пробел. Далее узнаете если в конце вашего слова есть знаки пунктуации - удаляете... Но это все на словах...
W0LF вне форума Ответить с цитированием
Старый 28.03.2010, 11:03   #3
bicdibus
Пользователь
 
Регистрация: 19.03.2010
Сообщений: 14
По умолчанию

функцыя read читает текст с заданой позиции?
bicdibus вне форума Ответить с цитированием
Старый 28.03.2010, 12:33   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
функцыя read читает текст с заданой позиции?
нет. она читает с текущей позиции указателя в файле..

а вообще, по вопросу видно, что вы не очень представляете себе, какой алгоритм у вас будет, и как его реализовать на Дельфи...
Самый простой способ загрузить файл в память через
Код:
 var TS : StringList;
begin
  TS := StringList.Create;
  TS.LoadFromFile('ВашТекстовыйФайл.txt');
// всё в переменнойTS полностью Ваш файл!!
далее берёте любую случайную строчку (в диапазоне от 0 до (TS.Count - 1)

Код:
sRandom := TS.Strings[Random(TS.Count)];
потом разбираете эту строчку на слова, подсчитывая их количество (и заполняя массив), потом берёте случайное слово из этого массива..

p.s. в начале программы не забудьте один раз вызвать процедуру randomize;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.03.2010, 12:45   #5
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Цитата:
Сообщение от bicdibus Посмотреть сообщение
как прочитатьть одно слово изтекстового(тхт) файла,желательно случайное.
Информация для размышления....

Код:
// Разбор текста из файла
procedure FileParser;
var
  Stream: TFileStream;
begin
   Form1.MemoResult.Clear;
   if Form1.OpenDialog.Execute then
   begin
      // Создаем поток и загружаем в него файл
      Stream := TFileStream.Create( Form1.OpenDialog.FileName, fmOpenRead );
      with TParser.Create( Stream ) do
         // Пока не дошли до конца потока...
         while Token <> toEof do
         begin
            Form1.MemoResult.Lines.Add( TokenString );
            NextToken;
         end;
      Stream.Free;
   end;
end;


// Разбор текста из Memo
procedure MemoParser;
var
  Stream: TMemoryStream;
begin
   Form1.MemoResult.Clear;
   // Создаем поток
   Stream := TMemoryStream.Create;
   // Загружаем в него текст из Memo
   Stream.WriteBuffer( Form1.MemoCode.Text[1], Length( Form1.MemoCode.Text ) );
   Stream.Position := 0;
   with TParser.Create( Stream ) do
      // Пока не дошли до конца потока...
      while Token <> toEof do
      begin
         Form1.MemoResult.Lines.Add( TokenString );
         NextToken;
      end;
   Stream.Free;
end;
Перемешивай дело с бездельем и не сойдешь с ума...

Последний раз редактировалось Grag; 28.03.2010 в 12:52.
Grag вне форума Ответить с цитированием
Старый 28.03.2010, 13:42   #6
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

Выкладываю то, что накидал (с коментами), специально для вас bicdibus
Код:
function GetRandomWord(FileName: string; const WithSimbols: Boolean = False): string;
var
  Text: TStringList;
  {Сюда будем загружать текст и работать с ним в дальнейшем}
  Count: integer;
  {Count используеться для цикла если WithSimbols = False}
  Buff: string;
  {Buff используеться как буфер для использования функции Delete,
   если WithSimbols = False}
begin
  Randomize;
  {Устанавливает генератор случайного числа на следующее значение}
  Text := TStringList.Create;
  {Создаем Text с типом TStringList}
  Text.LoadFromFile(FileName);
  {Загружаем в Text содержимое файла, FileName содержит адрес
   к вашему файлу}
  Text.Delimiter := ' ';
  {Задаем знак разделения, у нас это - пробел}
  Text.DelimitedText := Text.Text;
  {Разделяем текст по строчно, получеться каждое слово на новой
   строке...}
  if WithSimbols = False then begin
    {Если в вызове функции задали WithSimbols = False значит...}
    for Count := 0 to Text.Count - 1 do begin
      {Запускаем цикл от строки №0 до последней (Количество строк - 1)}
      Buff := Text[Count];
      {Загружаем в Buff по очереди слова}
      case Ord(Buff[Length(Buff)]) of
          1..64,
          91..96,
          123..164,
          166, 167,
          171..174,
          176..178,
          181..183,
          185, 187:
      {Если последний символ у нас не буква...}
        begin
          Delete(Buff, Length(Buff), 1);
          {..удаляем его}
          Text[Count] := Buff;
          {Возвращаем слово из буфера назад в Text}
        end;
      end;
    end;
  end;
  Result := Text[Random(Text.Count - 1)];
  {В результат нашей функции возвращаем одно слово, это слово
   определяем через Random (Случайным выбором от первого до
   последнего слова)}
  Text.Free;
  {Освобождаем память занятую переменной Text}
end;
Использование:
Код:
    ShowMessage(GetRandomWord('e:\1.txt'));
  //Без знаков препинания

  ShowMessage(GetRandomWord('e:\1.txt', True));
  //Со знаками препинания
W0LF вне форума Ответить с цитированием
Старый 29.03.2010, 18:06   #7
bicdibus
Пользователь
 
Регистрация: 19.03.2010
Сообщений: 14
По умолчанию

а 2 файла могуть быть открыты одновременно?
я открыл 2 файла 1 для чтения, 2 для запмси, после запуска проги i/o error32 или 105
bicdibus вне форума Ответить с цитированием
Старый 29.03.2010, 18:08   #8
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Цитата:
Сообщение от bicdibus Посмотреть сообщение
а 2 файла могуть быть открыты одновременно?
я открыл 2 файла 1 для чтения, 2 для запмси, после запуска проги i/o error32 или 105
Да хоть десять, только с разными файловыми переменными...
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 30.03.2010, 09:11   #9
bicdibus
Пользователь
 
Регистрация: 19.03.2010
Сообщений: 14
По умолчанию

переменные у меня разные, но ета ошыбка уже достала i/o error 105
bicdibus вне форума Ответить с цитированием
Старый 31.03.2010, 21:48   #10
xakkkkker
Форумчанин
 
Аватар для xakkkkker
 
Регистрация: 15.12.2007
Сообщений: 226
По умолчанию

по подробнеей об ошибке на какую строку указывает?
xakkkkker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прочитать данные из файла до первого пробела Cookson Помощь студентам 5 27.03.2010 10:26
Прочитать из файла и построить график(Delfi) Мирный Басист Помощь студентам 0 13.12.2009 22:27
Прочитать из файла строку ds.Dante Общие вопросы .NET 22 03.09.2009 16:08
Побуквенно считать слово из файла Zloy_Doomer Общие вопросы Delphi 13 18.12.2008 12:40
Не получается прочитать из файла...( Regloger Помощь студентам 3 09.12.2007 14:23