Ir para conteúdo
Fórum Script Brasil
  • 0

Problema Com Arquivo Texto (.csv)


c0de

Pergunta

O que eu preciso fazer é:

abri um arquivo txt, gerado a partir de uma planilha o excel, que será "uploadeado" pelo usuário;

ler todas as linhas e campos divididos por ";" que tem no arquivo txt, e guardar em uma array bidimensional;

após feito isso eu preciso inserir num banco de dados o conteúdo do arquivo; segue abaixo o conteúdo de um arquivo:

item;%;pm;a1;a2;a3;a4;a5

1.1;65;3;15;15;10;10;15

1.2;55;4;15;10;10;10;10

1.3;50;3;15;10;10;5;10

2.1;65;3;15;15;10;10;15

2.2;60;3;15;5;10;15;15

2.3;75;3;20;10;20;10;15

3.1;80;3;20;15;20;10;15

3.2;65;3;10;20;10;10;15

4.1;90;3;15;20;20;15;20

4.2;85;3;15;20;15;15;20

5.1;80;2;15;20;15;15;15

5.2;45;2;10;10;10;10;5

5.3;50;2;10;10;10;10;10

6.1;70;3;20;15;10;10;15

6.2;45;3;10;10;10;5;10

6.3;65;3;15;15;15;10;10

7.1;75;3;15;15;20;15;10

7.2;70;2;15;15;15;10;15

7.3;65;2;15;15;10;10;15

7.4;70;2;15;15;10;20;10

8.1;60;10;60;;;;

8.2;60;10;60;;;;

8.3;80;6;80;;;;

8.4;20;3;20;;;;

8.5;40;8;40;;;;

8.6;80;3;80;;;;

8.7;20;5;20;;;;

Na hora de inserir, no caso do primeiro campo da linha(item), ele deve verificar o número do item(1.1, item 1 ou 2.1, item 2), e inserir de acordo com o item.

Em seguinda para inserir os campos a1,a2,a3,a4 e a5 deve-se verificar o número do subitem(1.1, subitem 1 ou 1.2, subitem 2), e inserir de acordo com o subitem.

Inicialmente é isso, não sei se ficou mais claro o que eu tenho como dúvida, mas espero ter esclarecido melhor.

Eu fiz algumas partes se for necessário coloco-as aqui para ter uma base.

Obrigado pela atenção. Agradeço as possíveis ajudas.

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Não quero que façam o script pra mim, eu já fiz a leitura, mas não sei como pegar os valores e inserir de acordo com os campos, como falei no post anterior.

Segue o que eu fiz para ler o arquivo:

<?php
$arquivo = fopen($nome,'r');
echo $arquivo."<br><br>";
echo fgets($arquivo,1024)."<br><br>";
$i=0;
while (!feof($arquivo)){
  $i++;
  $linha = fgets($arquivo,4096);
  echo "<br>Linha ".$i."<br>".$linha."<br>";
  $dado=explode(";",$linha);
  $j=0;
  while ($j<8){
    echo "<br>Dado: ".$dado[$j]."<br>";
    $j++;
  }
}
?>
Agora para inserir os campos eu fiz este:
<?php
include("conecta.inc");

$i=0; $j=0;
while ($i<=$linhas[$i][$j]) {
  $i++;
  while ($j<=$linhas[$i][$j]) {
    se ($j=0) {
      switch (substr($linhas[$i][$j],0,1)) {
        case 1:
        $query="INSERT INTO dm_criterio (item) VALUES ($linhas[$i][$j]) WHERE criterio=1";
        break;
        case 2:
        $query="INSERT INTO dm_criterio (item) VALUES ($linhas[$i][$j]) WHERE criterio=2";
        break;
        case 3:
        $query="INSERT INTO dm_criterio (item) VALUES ($linhas[$i][$j]) WHERE criterio=3";
        break;
        case 4:
        $query="INSERT INTO dm_criterio (item) VALUES ($linhas[$i][$j]) WHERE criterio=4";
        break;
        case 5:
        $query="INSERT INTO dm_criterio (item) VALUES ($linhas[$i][$j]) WHERE criterio=5";
        break;
        case 6:
        $query="INSERT INTO dm_criterio (item) VALUES ($linhas[$i][$j]) WHERE criterio=6";
        break;
        case 7:
        $query="INSERT INTO dm_criterio (item) VALUES ($linhas[$i][$j]) WHERE criterio=7";
        break;
        case 8:
        $query="INSERT INTO dm_criterio (item) VALUES ($linhas[$i][$j]) WHERE criterio=8";
        break;
      }
      mysql_query($query) or die("Erro ao inserir os dados: ".mysql_error());
    }
    else {
      if ($j>2) {
        switch (substr($linhas[$i][0],(strlen($linhas[$i][$j])-1),1)) {
          case 1:
          $query="INSERT INTO dm_criterio (aspecto) VALUES ($linhas[$i][$j]) WHERE item=1";
          break;
          case 2:
          $query="INSERT INTO dm_criterio (aspecto) VALUES ($linhas[$i][$j]) WHERE item=2";
          break;
          case 3:
          $query="INSERT INTO dm_criterio (aspecto) VALUES ($linhas[$i][$j]) WHERE item=3";
          break;
          case 4:
          $query="INSERT INTO dm_criterio (aspecto) VALUES ($linhas[$i][$j]) WHERE item=4";
          break;
          case 5:
          $query="INSERT INTO dm_criterio (aspecto) VALUES ($linhas[$i][$j]) WHERE item=5";
          break;
        }
        mysql_query($query) or die("Erro ao inserir os dados: ".mysql_error());
      }
    }
    $j++;
  }
}
?>

Entretanto, analisando o script acima verifiquei que tem muitas linhas repetidas, mas não consegui melhorar e não sei se funciona corretamente.

Se alguém puder analisar e melhorar este script (e o anterior), ou puder me passar um algoritmo genérico que possa fazer o que expiquei no post anterior, agradeço.

Obrigado pela atenção.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,6k
×
×
  • Criar Novo...