Sachek
Умелый
- Регистрация
- 23 Мар 2009
- Сообщения
- 398
- Реакции
- 120
- Автор темы
- #1
Для просмотра скрытого содержимого вы должны войти или зарегистрироваться.
Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
$1 =1;
$2 =2123123;
$1 =1 ;т.е. строка дополнена мусором до фикс. длины
$2 =2123123;
111222333444555666777888999
$dataSize = 3; // размер блока данных в байтах
$readBlokNomer = 4; // номер блока который нужно изменить
$file = fopen('test.txt','r+');
fseek($file, ($readBlokNomer-1)*$dataSize);
$data = (int)fgets($file, $dataSize+1); //хз зачем тут +1
$data++; // инкриментируем ...
/**
* ну и нужно проверить не перевалило ли значение за приделы блока ...
* а то при записи его урежит ..
*/
fseek($file, ($readBlokNomer-1)*$dataSize);
// str_pad дополняем пробелами (муссором) до нужной длины
fputs($file, str_pad($data, $dataSize, ' ', STR_PAD_RIGHT));
fclose($file);
111222333445555666777888999
/**
* Get row value in file
*
* @param integer Row number
* @param string [Optional] File name
* @return mixed
*/
function getFileRow( $row, $file = 'data.txt' )
{
static $files = array();
if ( empty( $files[$file] ) )
{
$files[$file] = file( $file );
}
$line = $files[$file][--$row]; // нумерация в file() идет с нуля, поэтому декрементируем переменную $row
return trim( substr( $line, strrpos( $line, '=' ) + 1 ), ';' );
}
данное решение хранит в памяти данные всего файлакак вам такое решение?
.........
Sachok321; написал(а):Как мне в этом скрипте выбрать именно 3 строку к примеру?
$row = getFileRow(3, 'fileName.txt' );
А как то можно обнулить это накапливание? А то лишний расход ресурсов не оч хоцецаданное решение хранит в памяти данные всего файла
более того, эти данные накапливаются из всех файлов которые будут открываться этой ф-цией в статической переменной
при небольших файлах вполне можно использовать, но в противном случае будет ненужный расход памяти
как-то так
PHP:$row = getFileRow(3, 'fileName.txt' );
function getFileRow( $row, $file = 'fileName.txt' )
{
$lines = file( $file );
$line = $lines[$row - 1];
return trim( substr( $line, strrpos( $line, '=' ) + 1 ), ';' );
}
я приводил в пример эту функцию, если нужно много раз брать данные
для одной выборке во всем скрипте:
как-то такPHP:function getFileRow( $row, $file = 'fileName.txt' ) { $lines = file( $file ); $line = $lines[$row - 1]; return trim( substr( $line, strrpos( $line, '=' ) + 1 ), ';' ); }