Перезаписать фрагмент файла с помощью php?
я Не знаю, как объяснить мою проблему, поэтому я расскажу,:
Я использую PHP
и хотел бы обработать файл .txt n строк.
Каждая строка имеет размер по умолчанию 20 символов.
например... первые 8 символов относятся к дате отправки (ddmmaaa), 2 следующие в государство происхождения (SP, RJ, ...), 2 других в состояние, назначение, и последние 8 код продукта.
Linha 1: 01012014RJPA00001472
Linha 2: 03121997MGRS00192010
...
Linha n: 28092012AMAC00000071
То, что я хотел бы знать, как переписать один из этих терминов (не всю строку, а не весь файл) и сохранить файл.
Тип: В строке 2 файла, я хочу, чтобы изменить состояние начало MG MT без изменения других данных из файла. Например, если я взял указателя в положение до 'MG' apertasse insert на клавиатуре и, вероятно, будет введен 'MT'.
3 answers
Есть несколько способов... То, что вы просили, я считаю, что это в основном это:
<?php
// Tamanho padrão da sua linha
$linha_tamanho_default = 20;
// Array que define o inicio do valor na linha de acordo com o tipo de dado
$inicio = array(
"DATA" => 0,
"UF" => 8,
"DESTINO" => 10,
"CODIGO" => 12,
);
// Define o tamanho de cada item de acordo com o tipo de dado
$tamanho = array(
"DATA" => 8,
"UF" => 2,
"DESTINO" => 2,
"CODIGO" => 8,
);
// simulando o arquivo em uma string
// equivale a um arquivo txt com o conteudo do comentário abaixo:
/*
01012014RJPA00001472
03121997MGRS00192010
28092012AMAC00000071
*/
$arquivo = "01012014RJPA00001472\n03121997MGRS00192010\n28092012AMAC00000071";
/***** Abaixo os parâmetros definem que a UF da 3ª linha será substituida por RJ */
// Define que TIPO de valor será substituido
$tipo = "UF";
// Define a linha que será alterada
$linha = 3;
// Define o NOVO valor
$valor = "RJ";
// Calcula a posição para a substituição
// usa $linha-1 (pois a contagem inicia em 0)
// usa $linha_tamanho_default+1 (pois inclui o \n)
// soma com o inicio do item que deseja substituir de acordo com a linha
$posicao = ($linha-1)*($linha_tamanho_default+1) + $inicio[$tipo];
// Retorna o arquivo
$arquivo = substr_replace($arquivo, $valor, $posicao, $tamanho[$tipo] );
// Printa os resultados
echo $arquivo;
?>
Будет интересно, если вы используете регулярные выражения для этого.
Вы сказали, что ваш текстовый файл состоит из строк в следующем формате: "
- 20 символов в каждой
- 10 первых символов даты, не имеет значения для наших целей
- 2 символов, следующих UF, учитывая, что мы хотим работать
- 8 символов, следующие также не имеют значения
Таким образом, базовые регулярные выражения для каждой строки будет выглядеть так:
/^(?P<data>.*){10}(?P<uf>.*){2}(?P<etc>.*){8}$/
Подставить эти данные, просто используем функцию preg_replace
:
$siglaABuscar = 'MT';
$novaSigla = 'MG';
$arquivo = file_get_contents('arquivo.txt');
$arquivo = preg_replace("/^(?P<data>.*){10}(?P<uf>$siglaABuscar){2}(?P<etc>.*){8}$/g", "$1$novaSigla$3", $arquivo);
file_put_contents('arquivo.txt', $arquivo);
PS: я написал код, голову, может быть, есть некоторые настройки, которые будут сделаны.
Ниже приведены некоторые советы, которые могут помочь
Методы fopen(), fread(), fgets(), fwrite(), fclose() используются, чтобы если доступ и изменять файлы из вашего php-скрипта. http://br.php.net/manual/pt_BR/function.fopen.php
И Другой вариант "тянуть все в массив", внести изменения, а затем записать обратно в файл. (если их много проверок и изменений, может быть хорошим вариантом)
$arrayDeLinhas = file($filename, FILE_IGNORE_NEW_LINES);
Это даст вам массив строк в файл, после можно ли справиться информацию, как вы хотите.
, Здесь можно найти какой-то метод, который поможет тебе справиться с string. http://php.net/manual/pt_BR/book.strings.php
Я Считаю, что wordwrap и substr_replace должны ему помочь. Но с этого момента является организация твой алгоритм, горе с вами!