![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| PROme |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 346 Регистрация: 23.7.2003 Где: Kiev Репутация: -1 Всего: 1 |
Плиз!!!
Хелп ламаку!!! Есть файл, хранящий массив, елементы разделены пробелом, например file.dat содержит: 1 2 3 5 4 7 3 4 5 5 3 8 5 4 3 7 5 4 4 5 3 4 6 3 как измений i-й елемент в j-й строке, например елемент номер 2 в 3-й строке, т.е. четверку на 5 -------------------- SEO-мастер |
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 5 Всего: 39 |
|
|||
|
||||
| PROme |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 346 Регистрация: 23.7.2003 Где: Kiev Репутация: -1 Всего: 1 |
чет я ниче не понял
мне нужно в файле изменить елемент массива, а ты че дал -------------------- SEO-мастер |
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 5 Всего: 39 |
PROme Я после экзамена по термообработке прЕтормаживаю
Это сообщение отредактировал(а) Secandr - 20.1.2004, 20:52 |
|||
|
||||
| PROme |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 346 Регистрация: 23.7.2003 Где: Kiev Репутация: -1 Всего: 1 |
Secandr, спасибо, конечно за помощь, но, похоже кто-то чиго-то не понял.
Смотри топик - запись в файл. Собственно именно с этим у меня и проблемы. Поставлю вопрос проще. Как записать содержимое $bla_bla в файл в нужную строку Точнее даже не просто в нужную строку, а обновить (заменить, затереть) существующую старую Это сообщение отредактировал(а) PROme - 20.1.2004, 23:34 -------------------- SEO-мастер |
|||
|
||||
| [xoodo] |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 9.3.2003 Репутация: 1 Всего: 4 |
Оно? |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 4 Всего: 317 |
Допустим ты хранишь все числа с одинаковой длинной, т.е. "234"," 23"," 2" - если надо дополняешь число пробелами.
Количество таких чисел в строке известно, также известно сколько символов разделяют строку. Тогда:
Не уверен в режиме открытия файла(может надо "r+"). Идея ясна - если мы знаем длинну элементов, то мы знаем сколько надо пропустить, что бы попасть в нужное место. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 5 Всего: 39 |
PROme Лучше хранить данные в виде:
1-2-3;4-5-6; Или вообще 1-2-3-4-5-6 Так с ними работать проще. Просто переовд строки в разных ОС разный и могут быть проблемы при переносе (Unix - \n, Windows - \r\n) Гораздо лучше применять специфические разделители. |
|||
|
||||
| IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 44 Всего: 73 |
Вообще все делается намного проще ... чет Вы тут кашу развели ... особенно Secandr со split'om это же изврат ...
делается все так:
-------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 5 Всего: 39 |
Iz@top В принципе идея была такая же.
А чем split хуже explode ? |
|||
|
||||
| PROme |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 346 Регистрация: 23.7.2003 Где: Kiev Репутация: -1 Всего: 1 |
О Боже! Терпение-терпение-терпение...
Всем, конечно, спасибо, но я спрашивал под конец уже, можно ли как-то на ПХП переписать отдельную строку в файле. Перезапись всего файла не катит из-за раааааааааазмеров файла. -------------------- SEO-мастер |
|||
|
||||
| Sardar |
|
||||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 4 Всего: 317 |
Я так и понял Ответ: организуй структуру файла так что бы было удобно перемещатся по нему. Так как ты хранишь только числа тебе не нужны заморочки с заголовками, длиннами полей и т.д. С помощью fseek перемещай указатель в нужное положение, пиши то что надо.
Можно если ты знаешь где она находится -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
||||
|
|||||
| PROme |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 346 Регистрация: 23.7.2003 Где: Kiev Репутация: -1 Всего: 1 |
так, ставлю прямой вопрос, плиз КАК заменить 3-ю строку (целиком и полностью) в файле file.txt на содержание переменной $bla_bla
-------------------- SEO-мастер |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 4 Всего: 317 |
Если файл очень большой то можно хранить смещения до строк в отдельном файле, сами строки будут заканчиваться специальной последовательностью(впрочем ты можешь также хранить и длины строк).
Ты загружаешь файл со смещениями -> находишь смещение нужной строки -> работаешь со строкой. Заметь столько гемороя нужно для работы со строками переменной длинны! Если файл небольшой то лучше использовать file()->implode()->fwrite(), но на могопоточном сервере(Апач) этого делать не стоит, т.к. можешь потерять данные. Обходной путь fopen()->flock(LOCK_EX)->explode()->implode()->fwrite(); Пример
Писал с головы так что в коде не уверен. Уже нашел недоделки: каждый раз как только ты записываешь строку меньшей длинны ты уменьшаешь максимальный размер поля =\. Выход хранить длины строк. Если строка не вмещается в середину ты записываешь ее в конец файла данных и правишь ее смещение. При удалении ты удаляешь ее смещение из файла смещений. Смещения обязанны быть все одной длинны, если надо дополняй пробелами. Время от врмени перестраиваешь весь файл данных. ИМXО гиморно это все Это сообщение отредактировал(а) Sardar - 22.1.2004, 03:12 -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| Secandr |
|
||||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 5 Всего: 39 |
Можно модернизировать код предложеный Sardar.
Хранить файл в виде: 001001001001001002002002002002003003003003003 который логически может быть представлен в виде:
Смысл в том, что под каждую запись отделяется по 3 байта, в каждой строке 5 записей - 15 байт, тогда:
Просто выкидываем все разделители. |
||||
|
|||||
![]()
|
| Правила форума "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. |