Ir para conteúdo

POWERED BY:

Arquivado

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

c0de

Problemas com busca em txt

Recommended Posts

Tenho um arquivo txt que está separado por virgula desse modo:item;%;pm;a1;a2;a3;a4;a51.1;65;3;15;15;10;10;151.2;55;4;15;10;10;10;101.3;50;3;15;10;10;5;102.1;65;3;15;15;10;10;152.2;60;3;15;5;10;15;152.3;75;3;20;10;20;10;153.1;80;3;20;15;20;10;153.2;65;3;10;20;10;10;154.1;90;3;15;20;20;15;204.2;85;3;15;20;15;15;205.1;80;2;15;20;15;15;155.2;45;2;10;10;10;10;55.3;50;2;10;10;10;10;106.1;70;3;20;15;10;10;156.2;45;3;10;10;10;5;106.3;65;3;15;15;15;10;107.1;75;3;15;15;20;15;107.2;70;2;15;15;15;10;157.3;65;2;15;15;10;10;157.4;70;2;15;15;10;20;108.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;;;;Estou precisando inserir esses dados em um bd, até aí tudo bem. O problema é, os dados da primeira coluna devem ser inseridos de acordo com o primeiro numero, e os cinco ultimos numeros de acordo com o segundo número da primeira coluna... a estrutura ficaria assim:item % pm aspectos 1.1 65 3 15 15 10 10 15não sei se deu pra entender direito... mas doi o melhor que eu pude fazer por enquanto.O que eu pensei como solução:abrir o arquivo com file() retornando uma array com as linhas, mas como eu a partir dessa array, posso gerar uma array bidimensional contendo as linhas (vinda do file()) e as colunas (fazendo um explode() por exemplo)? e como, após gerar essa array bidimensional, fazer a busca para ir inserindo gradativamente no bd?Agradeço desde já.Diego.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Inicialmente eu preciso ler o arquivo txt todo

 

eu fiz assim:

if (file_exists($nome)) {  $linhas = file($nome);  $i=sizeof($linhas);  while ($i!=$linhas){	$dado[$i]=explode(";",$linhas[$i]);	i++;  }}
depois inserir os dados de acordo com a estrutura abaixo:

 

item....%...pm...aspectos

1.1......65...3......15

.........................15

.........................10

.........................10

.........................15

1.2......75...4......20

.........................10

.........................15

.........................20

.........................10

 

nesse caso eu fiz deste modo:

 

$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 criterio (item) VALUES ($linhas[$i][$j]) WHERE criterio=1";		break;		case 2:		$query="INSERT INTO criterio (item) VALUES ($linhas[$i][$j]) WHERE criterio=2";		break;		case 3:		$query="INSERT INTO criterio (item) VALUES ($linhas[$i][$j]) WHERE criterio=3";		break;		case 4:		$query="INSERT INTO criterio (item) VALUES ($linhas[$i][$j]) WHERE criterio=4";		break;		case 5:		$query="INSERT INTO criterio (item) VALUES ($linhas[$i][$j]) WHERE criterio=5";		break;		case 6:		$query="INSERT INTO criterio (item) VALUES ($linhas[$i][$j]) WHERE criterio=6";		break;		case 7:		$query="INSERT INTO criterio (item) VALUES ($linhas[$i][$j]) WHERE criterio=7";		break;		case 8:		$query="INSERT INTO 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 criterio (aspecto) VALUES ($linhas[$i][$j]) WHERE item=1";		  break;		  case 2:		  $query="INSERT INTO criterio (aspecto) VALUES ($linhas[$i][$j]) WHERE item=2";		  break;		  case 3:		  $query="INSERT INTO criterio (aspecto) VALUES ($linhas[$i][$j]) WHERE item=3";		  break;		  case 4:		  $query="INSERT INTO criterio (aspecto) VALUES ($linhas[$i][$j]) WHERE item=4";		  break;		  case 5:		  $query="INSERT INTO criterio (aspecto) VALUES ($linhas[$i][$j]) WHERE item=5";		  break;		}		mysql_query($query) or die("Erro ao inserir os dados: ".mysql_error());	  }	}	$j++;  }}
Inicialmente seria isso. Se puderes me ajudar com este problema acima agradeço muito.

 

 

Mas surgiu um outro problema,

eu preciso inserir numa outra tabela relacionada com a anterior os dados de % pm de acordo com o item.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olhando simplesmente o codigo nao da pra te ajudar legal eu gostaria de entender o que você quer fazer ,mas mostrando a finalidade, por que ali eu vi você fazer 2 loops e usar um monte de case e acho que da pra economizar bastante o seu codigo e montar algo mais simples e direto mas pra isso gostaria de entender melhor se for possivel

Compartilhar este post


Link para o post
Compartilhar em outros sites

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;a51.1;65;3;15;15;10;10;151.2;55;4;15;10;10;10;101.3;50;3;15;10;10;5;102.1;65;3;15;15;10;10;152.2;60;3;15;5;10;15;152.3;75;3;20;10;20;10;153.1;80;3;20;15;20;10;153.2;65;3;10;20;10;10;154.1;90;3;15;20;20;15;204.2;85;3;15;20;15;15;205.1;80;2;15;20;15;15;155.2;45;2;10;10;10;10;55.3;50;2;10;10;10;10;106.1;70;3;20;15;10;10;156.2;45;3;10;10;10;5;106.3;65;3;15;15;15;10;107.1;75;3;15;15;20;15;107.2;70;2;15;15;15;10;157.3;65;2;15;15;10;10;157.4;70;2;15;15;10;20;108.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 agora ficou mais claro o que eu tenho como dúvida, mas espero ter esclarecido melhor.Obrigado pela atenção.

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.