Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

faylonxd

Manipulaçao de arquivo

Recommended Posts

Boa Tarde, estou criando um sistema simples que ira substituir dentro de um TXT, uma palavra de acordo com outra anterior, para ficar mais facil de entender, tenho um arquivo chamado basededados.txt que contem o seguinte conteudo:

CREATE TABLE aaacervos (

CONSTRAINT pk_NomeDaTabela PRIMARY KEY(cdacervo),

)

 

 

CREATE TABLE aaautores (

CONSTRAINT pk_NomeDaTabela PRIMARY KEY(cdautor)

)

e eu estou lendo o arquivo linha a linha e quando encontro as palavras CREATE TABLE, pego a palavra seguinte e a coloco numa variavel, e pulo pra proxima linha e quando eu encontro a palavra pk_NomeDaTabela , eu substituo NomedaTabela pela variavel recebida anteriormente.

 

ficando por exemplo2 :

CREATE TABLE aaacervos (

CONSTRAINT pk_aaacervos PRIMARY KEY(cdacervo),

)

 

 

CREATE TABLE aaautores (

CONSTRAINT pk_aaautores PRIMARY KEY(cdautor)

)

porem, não estou conseguindo que essa substituição seja salva no arquivo original.

Segue o Codigo Fonte que possuo até agora:

 
<?php
// Abre o Arquvio no Modo w
$arquivo = fopen ('unitednations.txt', 'r+');
 
// Lê o conteúdo do arquivo 
while(!feof($arquivo))
{
//Mostra uma linha do arquivo
$linha = fgets($arquivo, 1024);
 
$busca = 'CREATE TABLE ';
$busca2 = 'CONSTRAINT pk_NomeDaTabela PRIMARY KEY';
if(substr($linha, 0, 13) == $busca){
$createprimary = $linha;
$primary = explode(" ", $createprimary);
}
if(substr($linha, 0, 38) == $busca2){
$constraint = $linha;
$fk = explode(" ", $constraint);
$novafrase = str_replace('NomeDaTabela', $primary[2], $linha);
$linha = $novafrase;
}
echo $linha.'<br>';
}
 
// Fecha arquivo aberto
fclose($arquivo);
?>

 

Alguem poderia me ajudar, a salvar o arquivo ficando da maneira que está no exemplo2??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não conheço uma forma de fazer isso de forma dinâmica.

Você pode fazer o seguinte:

<?php
$arquivo = fopen ('unitednations.txt', 'r+');

$busca = 'CREATE TABLE ';

$busca2 = 'CONSTRAINT pk_NomeDaTabela PRIMARY KEY';



while(!feof($arquivo))

{

    $linha = fgets($arquivo, 1024);



    if(substr($linha, 0, 13) == $busca){

        $novo = $linha . "\r\n";

        $segunda = fgets($arquivo, 1024);

        $primary = substr($linha, strlen($busca)); // pega o nome da tabela

        $linha2 = str_replace('NomeDaTabela', $primary, $segunda);

        $novo = $linha2 . "\r\n";
    } else $novo = $linha . "\r\n";


}



// Fecha arquivo aberto

fclose($arquivo);



// Salva novo conteúdo no arquivo

file_put_contents('unitednations.txt', $novo);



?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa variável $novo tem que ser iniciada com uma string vazia antes do while. E dentro do loop tem que concatenar 0 valor de $linha a $novo, pra adicionar cada nova linha à string $novo

 

Foi mal, na correria eu esqueci desses 2 detalhes. $novo tem que ser declarado antes, e ao invés de

$novo = $linha;

deveria estar

$novo .= $linha;

dessa maneira ele esta apagando todo o conteudo e nao está salvando alterado

 

Foi o que eu disse no meu post anterior. Não conheço uma forma de ler e alterar o conteúdo de forma dinâmica com o PHP. E não vejo diferença nenhuma no resultado. O interessante seria até salvar o arquivo com outro nome, para não perder o original.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.