![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Kirill89 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 17.10.2006 Где: Питер Репутация: нет Всего: 4 |
Доброе утро!
Аналогичные вопросы уже встречал, но решения для себя не нашел. Интересует функция, позволяющая читать строку по её номеру из файла. есть файл: 1.txt
1) как прочитать конкретную строку (например 5) НЕ загружая весь файл в память? 2) как дописать в конец файла строку (например line 10) не загружая весь файл в память? |
|||
|
||||
| Ипатьев |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
1) читать по одной
2) как обычно 3) научиться пользоваться БД и перестать морочить себе и другим голову. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 12 Всего: 211 |
Если длины строк заранее известны можно сделать seek на интересующую позицию, в противно случае придется либо читать весь файл целиком, либо читать построчно пока не дойдешь до нужной строки.
|
|||
|
||||
| Kirill89 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 17.10.2006 Где: Питер Репутация: нет Всего: 4 |
azesmcar, нет, длины строк не известны.
Ипатьев,
а если последнюю надо прочитать? всё равно фактически грузим весь файл.
не флудите пожалуйста тему если не знаете ответа. если бы в данном коде я мог использовать ДБ, я бы не стал писать этот пост. |
||||
|
|||||
| Ипатьев |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
не флудите, пожалуйста, если не владеете азами компьютерной грамотности ответ дан четко на поставленный вопрос. если вас интересовал другой вопрос - его и надо было задать. я бы порекомендовал вам держать свое мнение при себе. человек, который думает, что для записи данных в файл, его надо прочитать в память, с оценкой чужих знаний выглядит весьма глупо теперь о БД судя по остальным вопросам от таких же начинающих программистов, все препятствия к установке БД оказывались не такими уж страшными. и легко преодолеваются при наличии любознательности и трудолюбия. рекомендую поверить в свои силы и постараться освоить работу с базами данных. у вас обязательно получится. |
|||
|
||||
| Kirill89 |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 17.10.2006 Где: Питер Репутация: нет Всего: 4 |
Вам моё портфолио показать?
Причём тут запись? мне казалось, что мы говорим о чтении строки по её номеру из файла? или я как то не так выразился?
тут ключевое слово - ЧИТАТЬ Это сообщение отредактировал(а) Kirill89 - 21.10.2009, 10:50 |
||||||
|
|||||||
| Ипатьев |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
так трудно отмотать страницу наверх и посмотреть? если уже забыли о чем писали 10 минут назад пожалуйста, я напомню:
после таких вопросов никакого портфолио уже не надо. итак, вернемся к вопросу. только постарайтесь впредь писать внимательнее. Если бы я столкнулся в своей работе с подобной проблемой, то в первую очередь задал бы себе два вопроса: 1. В чем конкретно проблема прочитать весь файл по одной строчке. 2. В чем проблема воспользоваться базой данных? Я думаю, вы уже ответили себе на них. Не затруднит вас кратко нас ознакомить с ответами? Я думаю, это будет вежливо - ведь вы обратились к нам за помощью. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 12 Всего: 211 |
Ну тогда как я уже сказал, читать построчно. Работу можно оптимизировать проиндексировав файл, т.е. создать еще один файл, в котором будут лежать данные о смещении для каждой строки. Но это все уже смахивает на извращения, на самом ли деле файл такой огромный что это имеет значение и на самом ли деле использование базы невозможно? Насчет записи в конец файла, это делается просто, функция fopen принимает в качестве второго аргумента string $mode (тип открытия файла), если пройдете по ссылке вы увидите там возможные значения этого аргумента и их описания. Значение 'а' или 'a+' решит эту задачу. Это сообщение отредактировал(а) azesmcar - 21.10.2009, 11:00 |
|||
|
||||
| Kirill89 |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 17.10.2006 Где: Питер Репутация: нет Всего: 4 |
да, это вариант. спасибо.
в том что файл весит приблизительно 70 Мб и строчек там порядка 15 000. если мне понадобится строка номер 14 999, то мне придётся пройтись по всему файлу для её прочтения.
на сервере заказчика НЕТ поддержки баз данных. |
||||||
|
|||||||
| lelik133 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 517 Регистрация: 5.2.2003 Где: Москва Репутация: 5 Всего: 14 |
и что проще иметь геморрой и расставлять костыли для чтения n-ой строки или убедить заказчика сменить хостинг?
|
|||
|
||||
| Ипатьев |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
Всегда меня радовали такие объяснения.
А если у заказчика и сервера нет - тогда что? Если для решения какой-то задачи нужен инструмент - этот инструмент должен быть использован. Как вы узнали, что на сервере нет поддержки баз данных? Какие именно БД вы проверяли? |
|||
|
||||
| Kirill89 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 17.10.2006 Где: Питер Репутация: нет Всего: 4 |
lelik133, хороший вопрос =)
заказчики бывают разные... Добавлено через 1 минуту и 48 секунд Ипатьев, я работаю только в mysql, mssql и oracle. этих баз там нет. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 12 Всего: 211 |
Это в принципе то, что делат БД. Еще как вариант можно дополнять строки пробелами до определенной длины (тем самым устанавливая одну длину для всех строк). Но это все костыли. По моему для поддержки SqLite в php должен быть включен только модуль, я сомневаюсь что его отключили, вообще поддержка БД сейчас даже на бесплатных хостингах стоит, это немного странно. Проверьте все таки и поговорите с заказчиком в первую очередь, а уж потом пишите то, что уже давно написано.
SqLite практически ничем не отличается от mysql, да и на таком примитивном уровне работы с БД знания не помеха, если знаете SQL - то знаете все базы, в конце концов все они поддерживают ANSI SQL. Это сообщение отредактировал(а) azesmcar - 21.10.2009, 11:26 |
|||
|
||||
| Kirill89 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 17.10.2006 Где: Питер Репутация: нет Всего: 4 |
azesmcar, сейчас буду разбираться с sqlite. это явно проще индексации файла в ручную =)
|
|||
|
||||
| Ипатьев |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
Я так понимаю, что вопрос возник из предположения, что организовать поиск в неструктурированном файле проще, чем заниматься организацией базы данных. Сейчас обстоятельства изменились.
Судя по вопросам, я, все-таки, предположу, что уровень знаний по принципам работы операционных систем вряд ли позволит сделать работающую модель БД на коленке. Блокировки, к примеру, с большим трудом даются начинающим. В общем, если нужно оптимальное решение - то оно организационное. А если хочется приключений - то пишите, конечно. |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |