Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Взять рандомно одну строку из файла 
:(
    Опции темы
Валерия
Дата 1.5.2008, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Собсвтенно есть файл, допустим несколько мегабайт, в котором по одной в строку идут слова.
Нужно в переменную загнать рандомно одну строку.
Вариант там где весь файл грузим в массив, каждый елемент - строка, не устраивает, т.к очень не экономичный.
Нужно что то пошустрее и что бы поменьше памяти кушало.
Слова по длинне разные, поэтому не получиться отсчитать n*длинна_строки байт и потом прочитать эту строку, хотя это будет крайний вариант, если ничего не выйдет то пробелов в конец понаставляю которые потом буду обрезать smile
PM MAIL   Вверх
Proger89
Дата 1.5.2008, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 13.12.2007

Репутация: нет
Всего: нет



Можно получив номер строки, читать блоками файл, и считать с начала файла количество переходов на новую строку. Когда количество пройденных 10, 13 ,будет равно полученному случайному числу, необходимо считать следуюшую строку.
Для этой затеии можно отобразить файл в память и читать файл как массив.
Только не забывай что конец строки состоит из двух символов.
PM   Вверх
vinter
Дата 1.5.2008, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(Валерия @  1.5.2008,  19:58 Найти цитируемый пост)
 т.к очень не экономичный.

чем это? 
Цитата(Валерия @  1.5.2008,  19:58 Найти цитируемый пост)
Нужно что то пошустрее и что бы поменьше памяти кушало.

это работает быстро, а память кушать будет в 3 сек.(образно) от выполнения приложения, это много?


--------------------
Мой блог
PM MAIL WWW   Вверх
Валерия
Дата 1.5.2008, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Цитата(vinter @ 1.5.2008,  20:52)
Цитата(Валерия @  1.5.2008,  19:58 Найти цитируемый пост)
Нужно что то пошустрее и что бы поменьше памяти кушало.

это работает быстро, а память кушать будет в 3 сек.(образно) от выполнения приложения, это много?

Это очень много, скрипт вызываеться десяток раз за секунду.
Всетаки добавлю везде в конец какихто символов, и буду через fseek переходить на нужный байт..
PM MAIL   Вверх
JackYF
Дата 1.5.2008, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



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


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
MAKCim
Дата 1.5.2008, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(JackYF @  1.5.2008,  21:49 Найти цитируемый пост)
Ежели файл один и тот же, можно один раз проиндексировать его, сделав массив индексов, а затем переходить по случайному элементу из массива индексов. 

а в качестве индекса хранить смещение в файле


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Валерия
Дата 1.5.2008, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Я поняла про что вы, т.е хранить байт начала строки каждой.
Но сделала по другому, просто было
Код

11
2222
3333333

стало
Код

11_____
2222___
3333333

и теперь просто строку на которую мне нужно перейти, умножаю на количество байт любой строки, юзаю fseek и вуаля вроде быстро пашет!)
всем спасибо)
PM MAIL   Вверх
MAKCim
Дата 2.5.2008, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Валерия, 
плохое решение
имхо


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
W4FhLF
Дата 2.5.2008, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



Просто неприемлемое, я бы сказал smile


Цитата(Валерия @  1.5.2008,  22:58 Найти цитируемый пост)
юзаю fseek и вуаля вроде быстро пашет!)всем спасибо)


А если разница между максимальной и минимальной длиной строки будет, скажем, 100 символов? Причём из 100000 строк в твоём файле (условно) одна будет 100 символов, а остальные 10, то тебе придётся дописать 99999*90 = 8999910 байт данных в исходный файл smile 

А если запретят менять исходную структуру или вообще писать в файл? 

Причём сама по себе индексация отнимает на порядок меньше операций, недели твой вариант. 



--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Валерия
Дата 3.5.2008, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Сомневаюсь что с индексацией будет работать быстрее, тем более сам файл будет меняться очень редко, если вообще будет...
Я на пхп скриптик написала который приводит файл к нужному виду)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0777 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.