Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
LenaVesna
0 / 0 / 0
Регистрация: 18.05.2014
Сообщений: 27
1

Рандомно выводить из текстового файла строку

29.10.2014, 23:11. Просмотров 2279. Ответов 25
Метки нет (Все метки)

В общем-то, задача заключается в том, чтобы рандомно выводить из текстового файла строку.
В Паскале осуществить получилось, а вот в Делфи не выходит :с
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.10.2014, 23:11
Ответы с готовыми решениями:

Рандомно выводить 3 слова из 3 текстовых файлов
Подскажите, массивы надо прочитать из трех текстовых файлов. Три файла, в каждом файле в одной...

Вставка в строку данных из текстового файла
есть у меня одна хорошая программа, но в ней реализован ввод данных в строку.. можно ли написать...

Запись в определенную строку текстового файла
Есть консольное приложение, в нем нужно заисать текст в текстовый файл, в строку под определенным...

Считать случайную строку из текстового файла
Нужен код который будет брать случайную строку с текстового файла и присваивать ее строковой...

Как записать слово в n-ю строку текстового файла?
Причём, если n-я строка уже существует, то перезаписать её (записать туда только заданное слово);...

25
NIKOLAYY
826 / 724 / 339
Регистрация: 22.09.2012
Сообщений: 5,000
30.10.2014, 00:37 2
Куда выводить?
1
LenaVesna
0 / 0 / 0
Регистрация: 18.05.2014
Сообщений: 27
30.10.2014, 01:24  [ТС] 3
при нажатии кнопки Ок (Enter с клавиатуры) в окне вывода должны рандомно появляться строки из файла либо массива(но массив не желательно).
0
northener
пофигист широкого профиля
3454 / 2349 / 637
Регистрация: 15.07.2013
Сообщений: 13,989
30.10.2014, 01:32 4
Цитата Сообщение от LenaVesna Посмотреть сообщение
в окне вывода
Что есть "окно вывода"?
0
30.10.2014, 01:32
Sergio Leone
2470 / 1115 / 580
Регистрация: 07.06.2014
Сообщений: 3,259
30.10.2014, 08:54 5
LenaVesna, непонятно, чем помочь, т.к. непонятно, что у тебя не получается.
Давай начнём пошагово.
1) ты можешь написать на Delphi программу, которая "при нажатии кнопки Ок (Enter с клавиатуры) в окне вывода" пишет строго заданную тобой строку? (например, хорошо подходит строка 'Hello, World!' )

2) ты можешь вывести ПЕРВУЮ строку из заданного текстого файла в своё окно вывода ?

если да - то давай код, я покажу, как его изменить, чтобы строка была случайной.
Если нет - то объясняй, какие у тебя сложности и в чём они выражаются.
0
LenaVesna
0 / 0 / 0
Регистрация: 18.05.2014
Сообщений: 27
30.10.2014, 10:36  [ТС] 6
о, извиняюсь, и правда некорректно выражаюсь.
Цитата Сообщение от Sergio Leone Посмотреть сообщение
1) ты можешь написать на Delphi программу, которая "при нажатии кнопки Ок (Enter с клавиатуры) в окне вывода" пишет строго заданную тобой строку? (например, хорошо подходит строка 'Hello, World!' )
Это, конечно, я могу сделать,
но не могу придумать, как вывести текст именно из файла.С помощью чего?..

Если бы я это смогла сделать, может и с рандомом разобралась бы
но на этом месте я в тупике

за столь глупые вопросы прошу извинить - только начинаю изучать Delphi самостоятельно
0
northener
пофигист широкого профиля
3454 / 2349 / 637
Регистрация: 15.07.2013
Сообщений: 13,989
30.10.2014, 10:38 7
Цитата Сообщение от LenaVesna Посмотреть сообщение
не могу придумать, как вывести текст именно из файла.С помощью чего?.
Загрузи файл в TStringList и вытаскивай строку уже из него.
1
Puporev
Модератор
56838 / 43429 / 30027
Регистрация: 18.05.2008
Сообщений: 103,452
30.10.2014, 10:49 8
Delphi
1
2
3
4
5
6
7
8
9
10
procedure TForm1.Button1Click(Sender: TObject);
var t:TStringList;
    n:integer;
begin
randomize;
t:=TStringList.Create;//создаем экземпляр TStringList
t.LoadFromFile('text.txt');//грузим в него наш файл(файл в папке с программой)
n:=random(t.Count);//случайный номер строки
Edit1.Text:=t.Strings[n-1]
end;
1
northener
пофигист широкого профиля
3454 / 2349 / 637
Регистрация: 15.07.2013
Сообщений: 13,989
30.10.2014, 10:51 9
Delphi
1
Edit1.Text:=t.Strings[n];
1
Puporev
Модератор
56838 / 43429 / 30027
Регистрация: 18.05.2008
Сообщений: 103,452
30.10.2014, 10:53 10
Да, это я сначала хотел вводить n от 1..
1
D1973
Модератор
4200 / 3021 / 1453
Регистрация: 21.01.2014
Сообщений: 12,921
Записей в блоге: 3
Завершенные тесты: 1
30.10.2014, 10:55 11
northener, по-моему, все таки Edit1.Text:=t.Strings[n-1], т.к. индексы строк в StringList начинаются с 0, и при условии, что n = t.Count, а Edit1.Text:=t.Strings[n] мы получим Out of Range...
1
Puporev
Модератор
56838 / 43429 / 30027
Регистрация: 18.05.2008
Сообщений: 103,452
30.10.2014, 10:57 12
D1973, random(t.count) это от 0 до t.count-1
1
Sergio Leone
2470 / 1115 / 580
Регистрация: 07.06.2014
Сообщений: 3,259
30.10.2014, 11:05 13
да и вообще, нужно было без n обходиться:
Delphi
1
2
3
4
5
6
   t:=TStringList.Create;//создаем экземпляр TStringList
   t.LoadFromFile('text.txt');//грузим в него наш файл(файл в папке с программой)
   if t.Count=0 then Edit1.Text:=''
   else
      Edit1.Text:=t.Strings[ random(t.Count) ];
   t.Free;
1
D1973
Модератор
4200 / 3021 / 1453
Регистрация: 21.01.2014
Сообщений: 12,921
Записей в блоге: 3
Завершенные тесты: 1
30.10.2014, 11:08 14
In Delphi code, Random returns a random number within the range 0 <= X < Range
Puporev, точно, тупанул малеху...
1
LenaVesna
0 / 0 / 0
Регистрация: 18.05.2014
Сообщений: 27
04.11.2014, 11:28  [ТС] 15
спасибо большое всем - разобралась
0
wertyoz0
0 / 0 / 0
Регистрация: 22.07.2015
Сообщений: 15
25.07.2015, 17:57 16
можете подсказать, похожий вопрос:Три файла, в каждом файле в одной строке одно слово. Слов может быть любое кол-во.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.Button1Click(Sender: TObject);
var
f,d,c:TStringList;
i,s,p:integer;
 
begin
Randomize;
f:=TStringList.Create;
d:=TStringList.Create;
c:=TStringList.Create;
f.LoadFromFile('text.txt');
d.LoadFromFile('text1.txt');
c.LoadFromFile('text2.txt');
i:=Random(f.Count);
s:=Random(d.Count);
p:=Random(c.Count);
Label1.Caption:=f.Strings[i]+'  '+d.Strings[s]+'  '+c.Strings[s];
Работает правильно, только в лабел1 бывает такое что выдает только 2 слова или даже одно, мне кажется это из за того разное количество слов в файлах.
0
Puporev
Модератор
56838 / 43429 / 30027
Регистрация: 18.05.2008
Сообщений: 103,452
25.07.2015, 18:04 17
Ну во первых здесь нужно
Delphi
1
'  '+c.Strings[p];
Добавлено через 1 минуту
Цитата Сообщение от wertyoz0 Посмотреть сообщение
мне кажется это из за того разное количество слов в файлах.
Так проверьте на файлах с одинаковым количеством слов.
0
wertyoz0
0 / 0 / 0
Регистрация: 22.07.2015
Сообщений: 15
25.07.2015, 18:10 18
С одинаковый количеством работает, но мне просто надо если разное количество слов будет
0
Puporev
Модератор
56838 / 43429 / 30027
Регистрация: 18.05.2008
Сообщений: 103,452
25.07.2015, 18:12 19
У меня например всегда выводит 3 слова. Вы сменили переменную ту что я указал выше?
0
Sergio Leone
2470 / 1115 / 580
Регистрация: 07.06.2014
Сообщений: 3,259
25.07.2015, 18:16 20
Цитата Сообщение от wertyoz0 Посмотреть сообщение
label1.Caption:=f.Strings[i]+' *'+d.Strings[s]+' *'+c.Strings[s];
тебе же говорят, исправь индекс для третьего слова. там переменная p должна быть!
Т.е. должно быть
Delphi
1
label1.Caption:=f.Strings[i]+'  '+d.Strings[s]+'  '+c.Strings[p];
0
25.07.2015, 18:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.07.2015, 18:16

Удалить из текстового файла его последнюю строку
1)Удалить из текстового файла его последнюю строку. Результат записать в другой файл 2)Имеется...

Получить самую длинную строку из текстового файла
Дан текстовый файл f. Получить самую длинную строку файла. Если в файле имеется несколько строк с...

Как считывать из текстового файла, пропуская первую строку?
Имею такой код: procedure TF_knopka.fZagrClick(Sender: TObject); // Закрузка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru