Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Извлечь данные из файла по номеру строки
 
 автор: SoloNifer   (12.11.2008 в 11:18)   письмо автору
 
 

Каким самым быстрым способом можно взять данные строки по номеру строки?

К примеру есть файл file.dat
у него ~350,000,000 строк, а нужны данные допустим 158,745,862-ой строки

написал скрипт, но очень долго ищет, что делать, кто знает?

  Ответить  
 
 автор: Trianon   (12.11.2008 в 11:36)   письмо автору
 
   для: SoloNifer   (12.11.2008 в 11:18)
 

А объем файла какой?
Индекс создавать. Во всяком случае, если файл меньше 2Гб.

  Ответить  
 
 автор: BinLaden   (12.11.2008 в 11:52)   письмо автору
 
   для: SoloNifer   (12.11.2008 в 11:18)
 

Можно длину строки делать фиксированной, тогда можно быстро доставать нужные строки.

  Ответить  
 
 автор: SoloNifer   (12.11.2008 в 13:24)   письмо автору
 
   для: BinLaden   (12.11.2008 в 11:52)
 

Строки не фиксированного размера, они динамичны в длинне.
А если писать их к примеру по 4096 байт то файл будет очень большой.

Можно индексировать, но возможно есть готовое решение и не нужно придумывать велосипед.

Вопрос есть ли и какое?!?

  Ответить  
 
 автор: SoloNifer   (19.11.2008 в 13:06)   письмо автору
 
   для: SoloNifer   (12.11.2008 в 13:24)
 

Народ, у кого нибудь есть решение без фиксированной длинны строк?

  Ответить  
 
 автор: Valick   (19.11.2008 в 13:37)   письмо автору
 
   для: SoloNifer   (19.11.2008 в 13:06)
 

Покажите ваш код... поправим если что.
А вообще чтобы не изобретать велосипед, нужно ездить на мотоцикле... т.е. использовать базу данных.

  Ответить  
 
 автор: Trianon   (19.11.2008 в 15:16)   письмо автору
 
   для: Valick   (19.11.2008 в 13:37)
 

Всё бы ничего, но что делать с файлами длиннее 2 Гб?

  Ответить  
 
 автор: Valick   (19.11.2008 в 16:32)   письмо автору
 
   для: Trianon   (19.11.2008 в 15:16)
 

У всех баз данных такая проблема при работе с файлами более 2Гб?

  Ответить  
 
 автор: Trianon   (19.11.2008 в 20:43)   письмо автору
 
   для: Valick   (19.11.2008 в 16:32)
 

при чем тут базы?
Я о php ( точнее о файловых функциях php 32-битовой платформы.)

  Ответить  
 
 автор: Valick   (19.11.2008 в 21:58)   письмо автору
 
   для: Trianon   (19.11.2008 в 20:43)
 

я вас не понимаю... я посоветовал человеку отказаться от файлов в пользу БД раз уж так важна скорость, на что вы мне сказали, "что всё хорошо, но как быть с файлами более 2Гб", а потом спрашиваете "при чём тут базы"...

Да кстати как вариант можно разбить этот файл на несколько меньших по объёму фйлов имена которых будут содержать номер начальной строки например 0, 100000, 200000 и тд.

  Ответить  
 
 автор: V2D   (19.11.2008 в 23:45)   письмо автору
 
   для: Valick   (19.11.2008 в 21:58)
 

<?php
$file
=file("file.dat");
echo 
$file['123456']; //номер строки плюс один т.к. массив начинается с нуля
?>

  Ответить  
 
 автор: Valick   (19.11.2008 в 23:53)   письмо автору
 
   для: V2D   (19.11.2008 в 23:45)
 

бедная оперативная память)))
вы хотели сказать минус один?)) хотя неважно этот вариант в любом случае не для меня))

  Ответить  
 
 автор: V2D   (20.11.2008 в 15:00)   письмо автору
 
   для: Valick   (19.11.2008 в 23:53)
 

Да действительно я что-то не подумал что файл большой, тогда как вариант сделать индексный файл где указать какая строка с какого байта начинается и каким кончается или просто разделить на блоки так же в индексном файле. И уже считывать небольшой кусочек из файла а не весь файл

  Ответить  
 
 автор: Trianon   (20.11.2008 в 00:59)   письмо автору
 
   для: Valick   (19.11.2008 в 21:58)
 

Вы сказали "покажите Ваш код - поправим если что"
Я гляжу (в этом разделе как минимум) на задачу совершенно конкретно.
Есть файл. Со строками текста. Достаточно длинный, чтобы даже и не думать ни об оперативной памяти. Ни о том, чтоб его содержимое куда-то, как-то, где-то копировать.
Он уже есть. Им пользуются. Разбить/переделать файл никто не позволит.
Впрочем, не помешают создать рядышком еще один - покороче на порядок-другой.
Вот в таком акцепте.

При размере файла до 2 Гб задача относительно проста.
За пределами (в 32bit php) наступает вешалка.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования