[RESOLVIDO] Ajuda

Boa tarde!

Tenho um arquivo .csv com os campos CODIGO e DESCRICAO, queria saber como faço para importar esse conteudo pra o banco de dados.

Pesquisei na base de conhecimento e encontrei esse codigo e estou tentando modificar para importar dos dados da minha planilha para o BD, só que não estou conseguindo.

Toda vez q tento importar diz q (“Arquivo nao existe”) como se o erro fosse no caminho do diretório.

Alguem poderia me ajudar?


$file = “/C:/”.{Documento a importar}; // nao estou sabendo preencher esse campo o arquivo eu salvei no diretório do C.

//testa a existencia do arquivo no diretorio
if (!file_exists($file))
{
sc_error_message(“Arquivo nao existe”);
sc_error_exit();
}
else
{
//Se arquivo existe

//Abre arquivo
$fp = fopen($file, “r”);

//Percorre arquivo
while (!feof($fp))
{
{$current_line = fgets ($fp);
if (!empty($current_line))
{ $_arr(explode(",",$current_line ));
$_codigo=$_arr[0];
$_descricao=$_arr[8];
sc_exec_sql(“insert into agr_iob_ncm_retorno_t (CODIGO, BASE_LEGAL)
values(’$vcodigo’,’$vdescricao’)”);
}

    }
}   

  //Conclusão

sc_alert(“Arquivo importado com sucesso!”);
fclose($fp);
}

eu precisei de fazer uma importação parecida e usei este codigo:

$file_handle = fopen(“C:\Users\Public\xxxxxx_.csv”, “r”);

while (!feof($file_handle) ) {

$line_of_text = fgetcsv($file_handle, 1024);

$Name=$line_of_text[11];
$Street=$line_of_text[0];
$City=$line_of_text[4];
$State=$line_of_text[23];
$Zipcode='';
$Phone=$line_of_text[2];
$company = $line_of_text[17];
$ssn = $line_of_text[26];

$nn = explode(' ',$Name);
$pnome= $nn[0];
$unome= $nn[1];



print $Name .' - '. $Street .' - '. $City .', '. $State . ' - '. $Phone .'   #Company:'.$company ."<BR>";


sc_exec_sql("INSERT INTO clientes
			(pri_nome,ult_nome,nome_completo,endereco,cidade,estado,cep,telefone,tipo_cadastro,ssn,obs)
				VALUES('$pnome','$unome','$Name','$Street','$City','$State','$Zipcode','$Phone','F','$ssn','')"); 

}

fclose($file_handle);

esta funcionando…

qual a função dessa linha $line_of_text = fgetcsv($file_handle, 1024);

$line_of_text = fgetcsv($file_handle, 1024);

  • Similar to fgets() except that fgetcsv() parses the line it reads for fields in CSV format and returns an array containing the fields read.

http://php.net/manual/en/function.fgetcsv.php

Mudei apenas o caminho onde se encontra o arquivo, o select e os campos a serem gravados.
rss e ocorre o seguinte

fopen(C:/teste): failed to open stream: No such file or directory

aff


$file_handle = fopen(“C:/teste”, “r”);
if (!file_exists($file_handle))
{
sc_error_message(“Arquivo nao existe”);
sc_error_exit();
}
else{
while (!feof($file_handle) ) {

$line_of_text = fgetcsv($file_handle, 2);

$codigo=$line_of_text[0];
$descricao=$line_of_text[8];

print $codigo .’ - '. $descricao ."
";

sc_exec_sql(“insert into agr_iob_ncm_retorno_t (CODIGO, BASE_LEGAL)
values(’$vcodigo’,’$vdescricao’)”);

					}
}

fclose($file_handle);

$file_handle = fopen(“C:\teste\iob_ncm_1.csv”, “r”);
if (!file_exists($file_handle))
{
sc_error_message(“Arquivo nao existe”);
sc_error_exit();
}
else{
while (!feof($file_handle) ) {

$line_of_text = fgetcsv($file_handle, 1024);

$codigo=$line_of_text[0];
$descricao=$line_of_text[8];

print $codigo .’ - '. $descricao ."
";

sc_exec_sql(“insert into agr_iob_ncm_retorno_t (CODIGO, BASE_LEGAL)
values(’$vcodigo’,’$vdescricao’)”);

					}
}

fclose($file_handle);

Funcionou ?

Não.
Apresenta a mesma mensagem.

eu acredito que esta com problema de “permissões” no diretorio q vc esta usando…

tenta colocar o arquivo dentro do \user\plublic

Pessanha,

Segue meu script de importação usado no SC, ajuste para suas necessidades.

[code]
// Address Directory’s uploader of Application
$path = $this->Ini->path_doc;

// Absolute path of the file
{arquivo} = $path . ‘/’ . {arquivo};

$separa = explode(".", {arquivo}); //Separamos o nome do arquivo para verificar seu tipo
$separa = array_reverse($separa); /array_reverse, inverte o array, então se o usuário enviar um arquivo com mais de um ponto, ele pegará o ultimo ponto, depois desse ponto será o tipo do arquivo/
$tipo = $separa[0]; //Pegamos o tipo do arquivo
/* Agora iremos verificar se o arquivo é válido, você pode alterar o tipo de arquivo que deseja receber conforme sua nescessidade */

if($tipo != “csv”) {

echo “”;
sc_redir(ctr_importa_diesel);

} else {

$arq = fopen({arquivo},'r');// le o arquivo txt
while($linha = fgetcsv($arq,2048,';')){ //se extrair uma linha e não for false
		{EMPRESA} = $linha[0];
		{DATA_OPERACAO} = sc_date_conv($linha[1],"dd/mm/aaaa","aaaa-mm-dd");
		{TIPO_CONSUMO} = $linha[2];
		{TIPO_CHASSIS} = $linha[3];
		{VALOR} = $linha[4];
	    {KML} = $linha[5];
	    {META} = $linha[6]; 
	
	sc_lookup(ver,"SELECT COD_EMPRESA, DATA_OPERACAO, TIPO_CHASSIS FROM TBL_CONS_OP WHERE COD_EMPRESA = '{EMPRESA}' AND DATA_OPERACAO = '{DATA_OPERACAO}' AND TIPO_CHASSIS = '{TIPO_CHASSIS}'");
		  
		if (empty({ver[0][0]}) && empty({ver[0][1]}) && empty({ver[0][2]})){
		sc_exec_sql("INSERT INTO TBL_CONS_OP (COD_EMPRESA,DATA_OPERACAO,TIPO_CONSUMO,TIPO_CHASSIS,VALOR,KML,META) VALUES ('{EMPRESA}','{DATA_OPERACAO}',{TIPO_CONSUMO},{TIPO_CHASSIS},{VALOR},{KML},{META})");	
	  	} else {	
		echo "<script>alert('Importação para essa Data e Empresa já foi Realizada!!')</script>"; 
	  	sc_redir(ctr_importa_diesel);
	    }
	}
   echo "<script>alert('Dados importados com sucesso!!')</script>";
   fclose($arq);
   unlink("{arquivo}");
   sc_redir(ctr_importa_diesel); 
//}

}[/code]

Espero que ajude.

Leandro Auler

Modifiquei o codigo pra atender , só que ele só ta gravando a primeira linha do arquivo.

Alguem pode m dizer o que fiz de errado?
--------------------- Segue o código que estou utilizando abaixo -------------------------------

// Address Directory’s uploader of Application
$path = $this->Ini->path_doc;

// Absolute path of the file
{arquivo} = $path . ‘/’ . {arquivo};

$separa = explode(".", {arquivo}); //Separamos o nome do arquivo para verificar seu tipo
$separa = array_reverse($separa); /array_reverse, inverte o array, então se o usuário enviar um arquivo com mais de um ponto, ele pegará o ultimo ponto, depois desse ponto será o tipo do arquivo/
$tipo = $separa[0]; //Pegamos o tipo do arquivo
/* Agora iremos verificar se o arquivo é válido, você pode alterar o tipo de arquivo que deseja receber conforme sua necessidade */

if($tipo != “csv”) {

echo “”;
sc_redir(control_importa_dados);
}
else
{

$arq = fopen({arquivo},‘r’);// le o arquivo
while($linha = fgetcsv($arq,2048,’;’)) //se extrair uma linha e não for false
{
$vcodigo = $linha[0];
$vdescricao =$linha[1];
if (empty({ver[0][0]}) && empty({ver[0][1]}) && empty({ver[0][2]}))
{
sc_exec_sql(“INSERT into agr_iob_ncm_retorno_t (CODIGO,BASE_LEGAL) VALUES (’$vcodigo’,’$vdescricao’)”);
}
}
}
echo “”;
fclose($arq);
unlink("{arquivo}");
sc_redir(control_importa_dados);

rss… Deu certo !! \o \o \o
eu que estava consultando a tabela errada Dã

obrigada!!!

=D