Jump to content


Photo

Ajuda ! Input Recebe Dados De Txt


  • Faça o login para participar
17 replies to this topic

#16 xaceshighx

xaceshighx

    Novato no fórum

  • Usuários
  • 15 posts
  • Sexo:Não informado

Posted 17/07/2006, 10:08

Fala gennf, blz? =)
Bom seu código me serviu para criar um esquema de envio de e-mails que estava precisando via txt.

Bom, andei fusando pela net e achei um código excelente e adaptei ele as minhas necessidades.
Tentei voltar a página na qual achei ele p/ dar os créditos ao autor, mas não entrou na página. =|
Segue abaixo o código:

Explicando o que o código abaixo faz:

1 Supondo que você tenha um arquivo txt com vários campos na primeira linha relacionados a um produto.
Os campos terão que ser separados por algum caracter, neste aqui esta ",". Lembra que eu comentei sobre os espaços em branco que ficava entre um campo e outro, qdo ele grava no Banco, ele desconsidera esses campos (y).
2 - Você terá que criar no seu ftp uma pasta com nome de sua escolha para upar os arquivos e gravá-los neles, dando permissão de gravação. Os arquivos são renomeados de uma forma simples e prática: por data e hora e renomeia tb p/ csv (Arquivo Excel) como pode ver abaixo no código.
3 - Neste código existe uma condição de limite ao arquivo a ser upado: 100K, fica seu critério isso.
4 - Feito o "up" ele grava na tabela todos os dados do txt, repare que qdo ele faz o load ele determina qual caracter é o diferenciador dos campos, que é o ",".
5 - Bom, é isso. Foi mto útil este código a mim, acredito que mtos as vezes precisam de algo do gênero.


<?
if($submit) {

$dbhost = "";
$dbuser = "";
$dbpass = "";
$dbname = "";

$con = mysql_connect($dbhost, $dbuser, $dbpass);
mysql_select_db($dbname, $con);

$mypath="./upload/"; //NESTA LINHA VOCÊ COLOCA O LOCAL ONDE TEM PERMISSÃO DE GRAVACÃO PARA QUE O ARQUIVO POSSA SER UPLOADADO
$mytable="TABELA"; // AQUI VOCÊ ESCOLHE O NOME DA TABELA

if ($upfile_size<="100000000") { // LIMITE DE UPLOAD DE 100K

$status="Ok";
$uploaded=date("YmdHis");

$myfile=$mypath .$uploaded .".csv"; //AQUI ELE RENOMEIA O ARQUIVO .CSV = TABELA DE EXCEL

if (copy($upfile, $myfile)) {
$status.=", arquivo copiado para a pasta UPLOAD.";

//COLOCAR O ARQUIVO NA TABELA
$insert_csv="LOAD DATA LOCAL INFILE '$myfile' INTO TABLE $mytable FIELDS TERMINATED BY ','";
$result_csv = mysql_query($insert_csv, $con) or die("NÃO VIROU ... " .mysql_error());
echo "$myfile<br>";
echo "$upfile<br>";
if ($result_csv) {
$status.=" e gravado no banco de dados.";
} else {
$status.=" MAS NÃO FOI POSSIVEL COLOCAR NA BASE DE DADOS";
}
} else {
$status.="... O ARQUIVO NAO FOI COPIADO";
}
echo "$status";
} else {
echo "ARQUIVO MUITO GRANDE";
}
} else {
?>
<html>
<head>
<title>Upload csv-file</title>
</head>
<body bgcolor="#ffffff" text="#000000" id=all>
<form enctype="multipart/form-data" action="<? echo "$PHP_SELF"; ?>" method=POST>
<div align="center">
<table border="0" cellpadding="0" cellspacing="0" width="600" align="center">
<tr>
<td width="200" align="left" valign="top">UPAR</td>
<td width="400" valign="top"><input name="upfile" type="file"><br><br></td>
</tr>
<tr>
<td width="100%" colspan="2" align="center"><input type="submit" name="submit" value="Upload"></td>
</tr>
</table>
</div>
</form>
</body>
</html>
<?
}
?>



Valeu !!!
Qq coisa eu volto.






Independente deste código que eu postei.

Qual seria a maneira de programar desta forma:

Arquivo txt:

maria rua tiradentes são paulo 350,00
josé da silva rua julio mesquita são paulo 750,15


----------------------------------------------------------------

Desta forma, eu sabendo que o campo nome pode ter no máximo 50 caracteres, e se o nome for 12, ele deixa 38 em branco como o arquivo vem, é possível pegar os dados sem ter um caracter diferenciando o campo ???? E como se alguém souber ?

Edição feita por: xaceshighx, 17/07/2006, 13:44.


#17 xaceshighx

xaceshighx

    Novato no fórum

  • Usuários
  • 15 posts
  • Sexo:Não informado

Posted 20/07/2006, 09:19

Fala ae!
Consegui solucionar o meu problema, abaixo segue o código para quem se interessar ou tiver ou mesmo problema que eu.

<? 
 if($submit) { 
  
 $dbhost = ""; // local onde esta o banco.
 $dbuser = ""; // usuário do banco.
 $dbpass = ""; // senha do banco.
 $dbname = ""; // nome do banco.
 
 // conecta-se ao banco de dados. 
 $con = mysql_connect($dbhost, $dbuser, $dbpass);  
 mysql_select_db($dbname, $con); 
  
 
 $pasta="./upload/"; // pasta onde são gravados os arquivos upados.
 

 $uploaded=date("YmdHis"); 

 $myfile=$pasta .$uploaded .".csv"; // renomeio TXT p/ CSV (arquivo excel).
   
 if (copy($upfile, $myfile)) { 

 
 $file = file("$upfile");

	 for($i = 0; $i < count($file); $i++) {
						$email		  = substr($file[$i], 0, 40);
		$empresa	= substr($file[$i], 40, 40);
		$endereco   = substr($file[$i], 80, 40);
		$bairro		  = substr($file[$i], 120, 25);
		$cidade		  = substr($file[$i], 145, 25);

		$sql = "INSERT INTO TESTE (email, empresa, endereco, bairro, cidade) VALUES ('$email', '$empresa', '$endereco', '$bairro', '$cidade')"; 
		$result = mysql_query($sql) or die(mysql_error()); 
	}
}	
?> 
 <html> 
 <head> 
 <title>Upload csv-file</title> 
 </head> 
 <body bgcolor="#ffffff" text="#000000" id=all> 
 <form enctype="multipart/form-data" action="<? echo "$PHP_SELF"; ?>" method=POST> 
 <div align="center"> 
 <table border="0" cellpadding="0" cellspacing="0" width="600" align="center"> 
 <tr> 
 <td width="200" align="left" valign="top">Upload TXT</td> 
 <td width="400" valign="top"><input name="upfile" type="file"><br><br></td> 
 </tr> 
 <tr> 
 <td width="100%" colspan="2" align="center"><input type="submit" name="submit" value="Upload"></td> 
 </tr> 
 </table> 
 </div> 
 </form> 
 </body> 
 </html> 
 <? 
 } 
 ?> 

A parte que estava complicando era pegar os campos do txt e jogar p/ banco, pois não havia nenhum caracter separador.

email = substr($file[$i], 0, 40);
0 => começa a partir do zero.
40 => pega os próximos 40 espaços.
$empresa = substr($file[$i], 40, 40);
40 => começa do espaço 40.
40=> pega os próximos 40 espaços.


Bom, é isso!

Valeu ...

#18 gennf

gennf

    A Solução está ai...

  • Usuários
  • 645 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte - MG

Posted 20/07/2006, 10:16

Uia...

Nada como usar um pouqinho a cabeça heim....

Garanto a vc que eu não teria essa ideia tão cedo :P

Mas ta ai, uma grande solução...

Falou (y)
Portal BatePapoBrasil
URL: www.batepapobrasil.com

----------------------------
Site desenvolvidos
URL:
VitrineABC :: Alugue Litoral :: OrtodontiaLago




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq