Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
1 / 1 / 1
Регистрация: 17.10.2014
Сообщений: 153

Удаление без считывания файла txt

06.01.2016, 10:00. Показов 685. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
скажите, пожалуйста, а можно ли удалить первую строку без считывания файла тектового в массив? У меня файл 150Мб... Сервер мне не будет давать столько оперативки....
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.01.2016, 10:00
Ответы с готовыми решениями:

Удаление записи из txt файла
1) Есть страница rss.php, в ней 2 формы: <div id="rssbox"> <div style="font-size: 20px;">Подписаться на...

Удаление текста из txt файла
В файле your_keys.txt находятся ключи. Пример: KEY1 KEY2 KEY3 KEY4 KEY5 А мне надо удалить KEY4.

Удаление проверенных строк из файла txt
Есть скрипт, который построчно берет значения из файла txt. Скрипт работает некоторое время и останавливается. Как сделать так, чтобы в...

3
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
06.01.2016, 11:48
Цитата Сообщение от BabaSveta Посмотреть сообщение
скажите, пожалуйста, а можно ли удалить первую строку без считывания файла тектового в массив? У меня файл 150Мб... Сервер мне не будет давать столько оперативки....
Конкретно в такой постановке как сказали Вы, думаю нельзя. Точнее, конечно, можно, но это очень низкоуровневое программирование, нужно работать напрямую с файловыми системами, и для каждой файловой системы будет свой алгоритм, да и эта задача не для PHP.

Можно выйти из ситуации другим способом. Считывать файл построчно, копировать каждую строку в другой, временный файл, все строки кроме первой. Потом удалить исходный, заменить временный на исходный и вуаля... Что-то типа того:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?php
 
$globalUsage = memory_get_usage();
 
// Функция создает файл, размером 150 МБ (150 строк по 1024КБ)
function generateFile($fileName)
{
    $handle = fopen($fileName, 'w');
    $strLen = 1024 * 1024 - 1;
    for ($i = 0; $i < 150; ++$i)
        fwrite($handle, str_repeat("a", $strLen)."\n");
    fclose($handle);
}
 
// Печать размера файла
function printMB($input)
{
    return sprintf("%10.4f MB", $input/1024/1024);
}
 
// Печать используемой памяти
function mem()
{
    global $globalUsage;
    $currentUsage = memory_get_usage();
    printf("Памяти задействовано: %s\n", printMB($currentUsage-$globalUsage));
}
 
$fileName = 'C:\bigTextFile.txt'; // Файл, размером 150 МБ
$tempFileName = 'C:\temp.txt';  // Временный файл
$maxBufferSize = 1024; // максимум читаем 1024 байта, или до конца строки
 
// Сгенерируем файл размером 150 МБ
generateFile($fileName);
 
echo "<pre>";
 
mem();
 
printf("Размер файла ДО %s: %s\n", $fileName, printMB(filesize($fileName)));
 
$fileHandle = fopen($fileName, 'r');
$tempFileHandle = fopen($tempFileName, 'w');
 
$line = null; // в эту переменную будем читать строки
$firstLinePassed = false; // флаг, который указывает что первую строку уже прошли
$i = 0;
while ($line = fgets($fileHandle))
{
    if ($firstLinePassed)
        fwrite($tempFileHandle, $line);
    else if (substr($line, -1) === "\n")
        $firstLinePassed = true;
    ++$i;
    if ($i % 10 == 0) // на каждой 10-ой итерации, проверим память
        mem();  
}
mem();
fclose($fileHandle);
fclose($tempFileHandle);
rename($tempFileName, $fileName);
printf("Размер файла ПОСЛЕ %s: %s\n", $fileName, printMB(filesize($fileName)));
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Памяти задействовано:     0.0011 MB
Размер файла ДО C:\bigTextFile.txt:   150.0000 MB
Памяти задействовано:     1.0107 MB
Памяти задействовано:     1.0107 MB
Памяти задействовано:     1.0107 MB
Памяти задействовано:     1.0107 MB
Памяти задействовано:     1.0107 MB
Памяти задействовано:     1.0107 MB
Памяти задействовано:     1.0107 MB
Памяти задействовано:     1.0107 MB
Памяти задействовано:     1.0107 MB
Памяти задействовано:     1.0107 MB
Памяти задействовано:     1.0107 MB
Памяти задействовано:     1.0107 MB
Памяти задействовано:     1.0107 MB
Памяти задействовано:     1.0107 MB
Памяти задействовано:     1.0107 MB
Памяти задействовано:     0.0106 MB
Размер файла ПОСЛЕ C:\bigTextFile.txt:   149.0000 MB
2
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
06.01.2016, 11:53
Думаю да, без разделения файла на части не получится.

А какая исходная задача, что это за файл? Может есть более удобные способы работы с данными.
0
06.01.2016, 11:54

Не по теме:

Я там че то не передал $maxBufferSize в fgets(), и вывод немного другой получится... ну да неважно, главное чтобы смысл был понятен...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.01.2016, 11:54
Помогаю со студенческими работами здесь

Функция seekq, вместо повторного считывания файла (txt)
Всем привет, ребят. Я тут новый и это мой первый пост :) И вопрос у меня вот какой.. Мне нужно переписать этот код так, чтобы считывание...

Удаление элемента структуры для правильного считывания WAV-файла
Господа, возник такой вопрос: Мне необходимо удалить элемент структуры. Это необходимо для правильного считывания WAV-файла, не...

Файл: Переписать содержимое текстового файла a.txt диска С в текстовый файл в.txt без пробелов
1.Переписать содержимое текстового файла a.txt диска С в текстовый файл в.txt без пробелов 2.Дан текст.файл C:\Program Files\2.txt,в...

Удаление пробелов из *.txt файла
Каким кодом можно удалить все пробелы в текстовом документе?

Удаление строки из txt файла
Привет. Имеется файл с текстом: строка1 строка2 строка3 Как удалить строку &quot;строка2&quot; (по названию, если есть) и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru