Labroskas Posted July 17, 2014 Report Share Posted July 17, 2014 Boas, tenho um pequeno código onde estou a ir buscar valores a um ficheiro de texto para gravar numa tabela,mas estou a ter problemas e já perdi imenso tempo nisto em vão, vou mostrar o código para vocês verem: <?php $chemin = "D:\\Xampp\\htdocs\\xampp\\Final\\distritos.txt"; $ponteiro = fopen ($chemin, "r"); $strtxt = ""; while (false !== ($char = fgetc($ponteiro))) { if ($char == ";") { if ($i == 1) { $valor[$i] = $strtxt; //Aqui vou meter o INSERT para a Tabela echo $valor[0]."-->".$valor[1]."<br>"; $strtxt = ""; } else { $valor[$i] = $strtxt; echo $valor[$i]."-->".$i." SS"."<br>"; $strtxt = ""; $i++; } } else { $strtxt = $strtxt.$char; } } fclose ($ponteiro); ?> /*AQUI ESTÁ O FORMATO DO FICHEIRO*/ 01;Aveiro 02;Beja 03;Braga 04;Bragança 05;Castelo Branco 06;Coimbra 07;Évora 08;Faro 09;Guarda /*APAREÇE ASSIM*/ 01-->2 SS Aveiro 02-->3 SS Beja 03-->4 SS Braga 04-->5 SS Bragan�a 05-->6 SS Castelo Branco 06-->7 SS Coimbra 07-->8 SS Nota: A minha ideia é ir buscar linha a linha, e depois separar os valores que estão delimitados com " ; ", para poder gravar na tabela, o Codigo = Valor[0] e a Designacao = Valor[1] Uma ajudinha era 5 estrelas, cumps Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted July 17, 2014 Report Share Posted July 17, 2014 (edited) $content = file("D:\\Xampp\\htdocs\\xampp\\Final\\distritos.txt")); array_walk($content, function(&$item) { $item = explode(";", $item); }); print_r($content); Edited July 17, 2014 by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Labroskas Posted July 17, 2014 Author Report Share Posted July 17, 2014 Boas, desde já obrigado, mas não tem um erro aqui ( function(&$item) )??? Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted July 17, 2014 Report Share Posted July 17, 2014 já experimentaste o código ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Labroskas Posted July 17, 2014 Author Report Share Posted July 17, 2014 Já, e já vi que não dá erro, foi lapso, mas tenho igual problema em depois extrair os valores dos campos aparece assim: Array ( [0] => Array ( [0] => 01 [1] => Aveiro ) [1] => Array ( [0] => 02 [1] => Beja ) [2] => Array ( [0] => 03 [1] => Braga ) [3] ) Como faço para extrair os dois campos que necessito INSERT INTO TblXPTO (Codigo, Designacao) VALUES ( ?, ?) Sou um pouco leigo na matéria ainda 😞 Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted July 17, 2014 Report Share Posted July 17, 2014 (edited) $content = file("D:\\Xampp\\htdocs\\xampp\\Final\\distritos.txt")); array_walk($content, function(&$item) { $item = "('".str_replace(";", "','", $item)."')"; }); $sql = "insert into TblXPTO (Codigo, Designacao) values ".implode(",", $content); echo $sql; Edited July 17, 2014 by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Labroskas Posted July 17, 2014 Author Report Share Posted July 17, 2014 Porreiro, só mais uma pergunta, se for possivel responder, e se tiver por ex, uma estrutura do TXT com 4 campos (01;Aveiro;;Rua X), mas a tabela só tem três campos e só kero gravar INSERT INTO TblXPTO (Codigo, Designacao, Rua) VALUES ( 01, Aveiro, Rua X), hà maneira de resolver, eu tou a tentar perceber, para o caso de me surgir essa situação, até pq vai surgir. Nota: Tem um parenteses a mais aqui "$content = file("D:\\Xampp\\htdocs\\xampp\\Final\\distritos.txt"));" daí eu tar com um erro ao início. Cumps Link to comment Share on other sites More sharing options...
chbcl Posted July 17, 2014 Report Share Posted July 17, 2014 porque não usas base de dados? é muito mais simples e rápido e não dá chatisses.. developer @ filipealves.net filipealvesbcl [a] gmail.com github.com/filipealvesbcl Link to comment Share on other sites More sharing options...
Labroskas Posted July 17, 2014 Author Report Share Posted July 17, 2014 Mas eu só tenho esses ficheiros de texto com os dados lá dentro, e lá está, só preciso disto para mandar os dados lá para dentro, pq eu tou aqui a mostrar este ficheiro pequeno, mas tenho um com milhares de registos, e não tenho hipoteses de inseri-los um a um. Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted July 17, 2014 Report Share Posted July 17, 2014 (edited) $content = file("D:\\Xampp\\htdocs\\xampp\\Final\\distritos.txt"); array_walk($content, function(&$item) { $item = explode(";", $item); unset($item[2]); $item = "('".implode("','", $item)."')"; }); $sql = "insert into TblXPTO (Codigo, Designacao, Rua) values ".implode(",", $content); echo $sql; Edited July 17, 2014 by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Labroskas Posted July 17, 2014 Author Report Share Posted July 17, 2014 Funcionou HappyHippyHippo, mas temo que não consiga em alguns ficheiros, porque por exemplo kero fazer uma comparação na tabela a ver se existe e assim não consigo com esta maneira de fazer tudo apenas num INSERT, e depois o outro problema é que posso ter campos no TXT vazios ex: TXT: (01;Aveiro;;Rua X) QUERY: INSERT INTO TblXPTO (Codigo, Designacao, Rua) VALUES ( 01, Aveiro, Rua X) TXT: (02;Viseu;;) QUERY: INSERT INTO TblXPTO (Codigo, Designacao, Rua) VALUES ( 02, Viseu) O segundo INSERT vai dar erro pq só traz dois registos para três campos 😞 Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted July 17, 2014 Report Share Posted July 17, 2014 (edited) ... tens a noção que não estas a dar toda a informação da tabela destino e, portanto, as respostas são, quanto muito, limitadas ao espectro do problema apresentado : minimalista. $content = file("D:\\Xampp\\htdocs\\xampp\\Final\\distritos.txt"); array_walk($content, function(&$item) { $item = explode(";", $item); $item = "(".implode(",", ($item == "" ? "null", "'$item'")).")"; }); $sql = "insert into TblXPTO (Codigo, Designacao, Rua) values ".implode(",", $content); echo $sql; nota : o número de campos no ficheiro (número de ; por linha +1) tem de ser exactamente igual ao número de campos declarados no sql (e pela mesma ordem que ...) Edited July 17, 2014 by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Labroskas Posted July 17, 2014 Author Report Share Posted July 17, 2014 Tem erro aqui: $item = "(".implode(",", ($item == "" ? "null", "'$item'")).")"; Tentei descortinar, mas sem sucesso. Tens razão, mas foram duvidas que foram surgindo, e como o projeto tá a começar tá muito dificil para kém vinha de linguagem VB apenas 😞 Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted July 17, 2014 Report Share Posted July 17, 2014 $content = file("D:\\Xampp\\htdocs\\xampp\\Final\\distritos.txt"); array_walk($content, function(&$item) { $item = explode(";", $item); $item = "(".implode(",", ($item == "" ? "null" : "'$item'")).")"; }); $sql = "insert into TblXPTO (Codigo, Designacao, Rua) values ".implode(",", $content); echo $sql; código corrigido IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Labroskas Posted July 17, 2014 Author Report Share Posted July 17, 2014 Tenho a noção que tou a ser chato, mas o comando continua a não funcionar assim: $item = "(".implode(",", ($item == "" ? "null" : "'$item'")).")"; ERROS: Notice : Array to string conversion in D:\Xampp\htdocs\xampp\Final_SupneT\mod_gerais\ger_codpost.php on line 166 Warning : implode(): Invalid arguments passed in D:\Xampp\htdocs\xampp\Final_SupneT\mod_gerais\ger_codpost.php on line 166 Eu fiz testes com a linha assim: $item = "(".implode(",", ($item == "" ? "null" : $item)).")"; ele mostra o INSERT, mas nos campos vazios faz (04,Braga, ), (05,Lisboa, ).... Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted July 17, 2014 Report Share Posted July 17, 2014 (edited) ups ... é o que dá fazer código sem pensar ... $content = file("D:\\Xampp\\htdocs\\xampp\\Final\\distritos.txt"); array_walk($content, function(&$record) { $record = explode(";", $record); array_walk($record, function(&$field) { $field == "" ? "null", "'$field'"; }); $item = "(".implode(",", $record.")"; }); $sql = "insert into TblXPTO (Codigo, Designacao, Rua) values ".implode(",", $content); echo $sql; Edited July 17, 2014 by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Labroskas Posted July 17, 2014 Author Report Share Posted July 17, 2014 Notice: Array to string conversion in D:\Xampp\htdocs\xampp\Final_SupneT\mod_gerais\ger_codpost.php on line 168 Linha 168: $sql = "insert into TblXPTO (Codigo, Designacao, Rua) values ".implode(",", $content); Fogo, não sei mais que poderá ser agora. Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted July 17, 2014 Report Share Posted July 17, 2014 deverás estar a fazer coisas extras ao código que te apresentei ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Labroskas Posted July 18, 2014 Author Report Share Posted July 18, 2014 Boas, apenas corrigi duas linhas k tavam a dar erro: array_walk($record, function(&$field) { $field == "" ? "null", "'$field'"; }); $item = "(".implode(",", $record.")"; Alterei o virgula e meti os dois pontos na 1ª linha, na segunda meti um parenteses: array_walk($record, function(&$field) { $field == "" ? "null" : "'$field'"; }); $item = "(".implode(",", $record).")"; Tenho apenas este código: $content = file("D:\\Xampp\\htdocs\\xampp\\Final\\distritos.txt"); array_walk($content, function(&$record) { $record = explode(";", $record); array_walk($record, function(&$field) { $field == "" ? "null": "'$field'"; }); $item = "(".implode(",", $record).")"; }); $sql = "insert into TblXPTO (Codigo, Designacao, Rua) values ".implode(",", $content); echo $sql; Cumps, e obrigado. Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted July 18, 2014 Report Share Posted July 18, 2014 a linha que apresentas não apresenta nenhuma possibilidade de dar o erro apresentado olha bem para o que a linha de código espera : // $sql = [string]<sql> . [string]implode([string]<",">, [array]<$contant>); $sql = "insert into TblXPTO (Codigo, Designacao, Rua) values ".implode(",", $content); como vês, todo o que é esperado (o que se encontra dentro dos []) é dado no código como dados válidos: - <sql> é uma string - o resultado da função implode é uma string - o primeiro parâmetro da função implode é uma string - o segundo parâmetro da função implode é previsível ser um array, no entanto se o erro fosse ai, a mensagem de erro seria o inverso (X to array conversion) IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now