Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » можно ли рандомно брать строки из файла?

Страниц (1): [1]
 

1. xemz - 09 Мая, 2018 - 19:33:57 - перейти к сообщению
Всем доброго времени суток, вот беру таким способом загружаю текстовой файл в массив text .

string text[1000]; // файл не должен превышать 1000 строк
if (fopen("C:\Users\abc\Desktop\111.txt", "r" ) !=0) // если файл открылся
{
for(int i=0; freadline(text[i])!=0; i++){} // читаем по строке до конца файла
fclose(); // закрываем файл
}

и потом могу брать из него по порядку сделав там переменную и постоянно её ++.

А можно ли брать из этого массива рандомные строки и так чтоб они не повторялись? И если можно то когда кончатся строки что останется в массиве? 0? или что то другое?) заранее спасибо
2. Dantes3000 - 09 Мая, 2018 - 20:07:48 - перейти к сообщению
Это немного не то. Проверка чтобы не предыдущее значение не было такое же как следущее.
Спойлер (Отобразить)
3. xemz - 09 Мая, 2018 - 20:21:37 - перейти к сообщению
тут не будут повторяться подряд 2 но третье значение может быть как первое же? то есть в итоге всё равно повторится?)

А можно что бы 1 строчку только 1 раз он брал??? То есть разбирал всю 1000 строк но рандомно. Без повторов.
4. Dantes3000 - 09 Мая, 2018 - 20:27:53 - перейти к сообщению
CODE:
string text[1000]; // файл не должен превышать 1000 строк
int texti[1001]; //номера всех рандомный строк
int r; //рандомная строка
int k=1; //для счетчика в массиве texti
//texti будет начинаться с [1] потому что не спрашивай почему



if (fopen("C:\Users\abc\Desktop\111.txt", "r" ) !=0) // если файл открылся
{
for(int i=0; freadline(text[i])!=0; i++){} // читаем по строке до конца файла
fclose(); // закрываем файл
}

r=rand(0, 1000);

for(int g=k; g!=0; g--)
{
p:if(r==texti[g]) {r=rand(0, 1000); goto p;}
else {texti[k]=r; k++;}
}

Я не знаю будет ли работать. 4 утра...днём бы что-то по-лучше придумал.
(Добавление)
CODE:
string text[1000]; // файл не должен превышать 1000 строк
int texti[1001]; //номера всех рандомный строк
int r; //рандомная строка
int k=1; //для счетчика в массиве texti
//texti будет начинаться с [1] потому что не спрашивай почему



if (fopen("C:\Users\abc\Desktop\111.txt", "r" ) !=0) // если файл открылся
{
for(int i=0; freadline(text[i])!=0; i++){} // читаем по строке до конца файла
fclose(); // закрываем файл
}

st:;
r=rand(0, 1000);

for(int g=k; g!=0; g--)
{
if(r==texti[g]) goto st;
}
texti[k]=r; k++;
5. Zireael - 10 Мая, 2018 - 02:49:23 - перейти к сообщению
 Цитата:
А можно ли брать из этого массива рандомные строки и так чтоб они не повторялись?

Можно перемешать массив, т. е. поменять местами строки.
code (Отобразить)
6. xemz - 10 Мая, 2018 - 06:15:08 - перейти к сообщению
Большое спасибо =) буду экспериментировать. с перемешиванием массива мне кажется получше. Можно создать доп файл с перемешанными строками и брать из него, тогда если скрипт остановить можно потом продолжить с места остановки.

Powered by ExBB FM 1.0 Final