Pergunta

Eu não sou o melhor em PHP e ficaria muito grato se alguém poderia ajudar. Basicamente eu preciso analisar cada linha de um datafeed e é só pegar cada bit de informação entre cada "|" - então eu posso adicioná-lo a um banco de dados. Eu acho que posso lidar recebendo a informação de entre o "|" é usando explodir, mas eu preciso de um pouco de ajuda com a análise de cada linha de um arquivo de texto como um singular. De facto para torná-lo ainda mais simples, eu só preciso usar cada linha de uma variável, vou enviar conteúdo para a variável usando um textarea e um formulário. Qualquer ajuda seria muito apreciada!

Foi útil?

Solução

Você pode ler um arquivo em uma matriz de linhas e fazer todo o dividir com:

$lines = file("filename");
foreach($lines as $line) {
    $parts = explode("|", $line);
    // do the database inserts here
}

Se você já tem todo o texto em uma variável como você disse (por exemplo, com algo como file_get_contents ()), você pode explodir em \ n primeiro e depois fazer a mesma declaração foreach como acima.

Outras dicas

Se você está lendo para fora do seu post textarea, você pode usar a função usando o caractere de nova linha explodir como o separador para obter cada "linha" na variável como um novo elemento de uma matriz, então você pode fazer explodir em seu elementos de matriz.

i.

$sometext = "balh | balh blah| more blah \n extra balh |some blah |this blah";

$lines = explode("\n", $sometext);
foreach($lines as $oneLine)
{
    $lineElements[] = explode("|", $oneLine);
}

então você tem uma matriz 2d de seus elems.

Se você está lendo a partir de um arquivo, você pode simplesmente usar a função de arquivo documentado aqui:

http://us2.php.net/manual/en/function .file.php

para obter cada linha do arquivo como um elemento de uma matriz.

Há um PHP pronto-construída analisar biblioteca que pode detectar automaticamente o formato CSV.

Exemplo:

$reader = new Dfp_Datafeed_File_Reader();
$reader->setLocation('test.csv');

foreach ($reader AS $record) {
    print_r($record);
}

Ele está disponível para download aqui , e há alguma documentação aqui .

Se o arquivo é pequeno, você pode usar () t o lê-lo em uma matriz , uma linha por elemento.

Se isso falhar, leia o arquivo em loop usando fgets ()

$handle = fopen("/tmp/inputfile.txt", "r");
while (!feof($handle)) {
   $buffer = fgets($handle, 4096);
   echo $buffer;
}
fclose($handle);

Você pode usar explodir para obter tanto:

$myFile = "File.txt";
$fh = fopen($myFile, 'r');
$data = fread($fh);
fclose($fh);
$newLines = explode("\n",$data);

foreach($newLines as $s)
{
  $parsed = explode("|",$s);
  foreach($parsed as $item)
  {
    // do your db load here
  }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top