Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> чтение строки по её номеру 
:(
    Опции темы
Kirill89
Дата 21.10.2009, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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

есть файл:
1.txt
Код

line 0
line 1
line 2
line 3
line 4
line 5
line 6
line 7
line 8
line 9

1) как прочитать конкретную строку (например 5) НЕ загружая весь файл в память?
2) как дописать в конец файла строку (например line 10) не загружая весь файл в память?


--------------------
PM MAIL WWW   Вверх
Ипатьев
Дата 21.10.2009, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



1) читать по одной
2) как обычно
3) научиться пользоваться БД и перестать морочить себе и другим голову.
PM MAIL   Вверх
azesmcar
Дата 21.10.2009, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Если длины строк заранее известны можно сделать seek на интересующую позицию, в противно случае придется либо читать весь файл целиком, либо читать построчно пока не дойдешь до нужной строки.
PM   Вверх
Kirill89
Дата 21.10.2009, 10:35 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



azesmcar, нет, длины строк не известны.

Ипатьев
Цитата

1) читать по одной

а если последнюю надо прочитать? всё равно фактически грузим весь файл.
Цитата

3) научиться пользоваться БД и перестать морочить себе и другим голову. 

не флудите пожалуйста тему если не знаете ответа. если бы в данном коде я мог использовать ДБ, я бы не стал писать этот пост.


--------------------
PM MAIL WWW   Вверх
Ипатьев
Дата 21.10.2009, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Kirill89 @  21.10.2009,  10:35 Найти цитируемый пост)
всё равно фактически грузим весь файл.

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

Цитата(Kirill89 @  21.10.2009,  10:35 Найти цитируемый пост)
если не знаете ответа

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

теперь о БД
судя по остальным вопросам от таких же начинающих программистов, все препятствия к установке БД оказывались не такими уж страшными. и легко преодолеваются при наличии любознательности и трудолюбия. рекомендую поверить в свои силы и постараться освоить работу с базами данных. у вас обязательно получится.
PM MAIL   Вверх
Kirill89
Дата 21.10.2009, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

от таких же начинающих программистов

Вам моё портфолио показать?
Цитата

человек, который думает, что для записи данных в файл

Причём тут запись? мне казалось, что мы говорим о чтении строки по её номеру из файла? или я как то не так выразился?
Цитата

1) читать по одной

тут ключевое слово - ЧИТАТЬ

Это сообщение отредактировал(а) Kirill89 - 21.10.2009, 10:50


--------------------
PM MAIL WWW   Вверх
Ипатьев
Дата 21.10.2009, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Kirill89 @  21.10.2009,  10:48 Найти цитируемый пост)
Причём тут запись?

так трудно отмотать страницу наверх и посмотреть? если уже забыли о чем писали 10 минут назад
пожалуйста, я напомню:
Цитата(Kirill89 @  21.10.2009,  10:21 Найти цитируемый пост)
как дописать в конец файла строку (например line 10) не загружая весь файл в память?

после таких вопросов никакого портфолио уже не надо.

итак, вернемся к вопросу.
только постарайтесь впредь писать внимательнее. 
Если бы я столкнулся в своей работе с подобной проблемой, то в первую очередь задал бы себе два вопроса:
1. В чем конкретно проблема прочитать весь файл по одной строчке.
2. В чем проблема воспользоваться базой данных?
Я думаю, вы уже ответили себе на них. Не затруднит вас кратко нас ознакомить с ответами? Я думаю, это будет вежливо - ведь вы обратились к нам за помощью. 

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


uploading...
****


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

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



Цитата(Kirill89 @  21.10.2009,  10:35 Найти цитируемый пост)
azesmcar, нет, длины строк не известны.

Ну тогда как я уже сказал, читать построчно. Работу можно оптимизировать проиндексировав файл, т.е. создать еще один файл, в котором будут лежать данные о смещении для каждой строки. Но это все уже смахивает на извращения, на самом ли деле файл такой огромный что это имеет значение и на самом ли деле использование базы невозможно? 
Насчет записи в конец файла, это делается просто, функция fopen принимает в качестве второго аргумента string $mode (тип открытия файла), если пройдете по ссылке вы увидите там возможные значения этого аргумента и их описания. Значение 'а' или 'a+' решит эту задачу.

Это сообщение отредактировал(а) azesmcar - 21.10.2009, 11:00
PM   Вверх
Kirill89
Дата 21.10.2009, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Работу можно оптимизировать проиндексировав файл

да, это вариант. спасибо.

Цитата

В чем конкретно проблема прочитать весь файл по одной строчке.

в том что файл весит приблизительно 70 Мб и строчек там порядка 15 000.
если мне понадобится строка номер 14 999, то мне придётся пройтись по всему файлу для её прочтения.
Цитата

В чем проблема воспользоваться базой данных?

на сервере заказчика НЕТ поддержки баз данных.


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


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 517
Регистрация: 5.2.2003
Где: Москва

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



и что проще иметь геморрой и расставлять костыли для чтения n-ой строки или убедить заказчика сменить хостинг?
PM ICQ   Вверх
Ипатьев
Дата 21.10.2009, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Всегда меня радовали такие объяснения. 
А если у заказчика и сервера нет - тогда что? 
Если для решения какой-то задачи нужен инструмент - этот инструмент должен быть использован. 

Как вы узнали, что на сервере нет поддержки баз данных? Какие именно БД вы проверяли?
PM MAIL   Вверх
Kirill89
Дата 21.10.2009, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



lelik133, хороший вопрос =)
заказчики бывают разные...

Добавлено через 1 минуту и 48 секунд
Ипатьев, я работаю только в mysql, mssql и oracle. этих баз там нет.


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


uploading...
****


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

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



Цитата(Kirill89 @  21.10.2009,  11:05 Найти цитируемый пост)
да, это вариант. спасибо.

Это в принципе то, что делат БД. Еще как вариант можно дополнять строки пробелами до определенной длины (тем самым устанавливая одну длину для всех строк). Но это все костыли.

Цитата(Kirill89 @  21.10.2009,  11:05 Найти цитируемый пост)
на сервере заказчика НЕТ поддержки баз данных. 

По моему для поддержки SqLite в php должен быть включен только модуль, я сомневаюсь что его отключили, вообще поддержка БД сейчас даже на бесплатных хостингах стоит, это немного странно. Проверьте все таки и поговорите с заказчиком в первую очередь, а уж потом пишите то, что уже давно написано.

Цитата(Kirill89 @  21.10.2009,  11:13 Найти цитируемый пост)
Ипатьев, я работаю только в mysql, mssql и oracle. этих баз там нет. 

SqLite практически ничем не отличается от mysql, да и на таком примитивном уровне работы с БД знания не помеха, если знаете SQL - то знаете все базы, в конце концов все они поддерживают ANSI SQL.

Это сообщение отредактировал(а) azesmcar - 21.10.2009, 11:26
PM   Вверх
Kirill89
Дата 21.10.2009, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



azesmcar, сейчас буду разбираться с sqlite. это явно проще индексации файла в ручную =)


--------------------
PM MAIL WWW   Вверх
Ипатьев
Дата 21.10.2009, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Я так понимаю, что вопрос возник из предположения, что организовать поиск в неструктурированном файле проще, чем заниматься организацией базы данных. Сейчас обстоятельства изменились. 
Судя по вопросам, я, все-таки, предположу, что уровень знаний по принципам работы операционных систем вряд ли позволит сделать работающую модель БД на коленке. Блокировки, к примеру, с большим трудом даются начинающим. В общем, если нужно оптимальное решение - то оно организационное. А если хочется приключений - то пишите, конечно.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

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


 




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


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

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