Labroskas Posted July 17, 2014 at 02:04 PM Report Share #562744 Posted July 17, 2014 at 02:04 PM 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 at 02:15 PM Report Share #562747 Posted July 17, 2014 at 02:15 PM (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 at 02:15 PM 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 at 02:26 PM Author Report Share #562748 Posted July 17, 2014 at 02:26 PM 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 at 02:29 PM Report Share #562749 Posted July 17, 2014 at 02:29 PM 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 at 02:33 PM Author Report Share #562750 Posted July 17, 2014 at 02:33 PM 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 at 02:37 PM Report Share #562751 Posted July 17, 2014 at 02:37 PM (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 at 02:38 PM 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 at 02:45 PM Author Report Share #562752 Posted July 17, 2014 at 02:45 PM 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 at 02:54 PM Report Share #562753 Posted July 17, 2014 at 02:54 PM 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 at 02:59 PM Author Report Share #562754 Posted July 17, 2014 at 02:59 PM 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 at 03:04 PM Report Share #562756 Posted July 17, 2014 at 03:04 PM (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 at 03:05 PM 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 at 03:26 PM Author Report Share #562758 Posted July 17, 2014 at 03:26 PM 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 at 03:53 PM Report Share #562759 Posted July 17, 2014 at 03:53 PM (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 at 03:54 PM 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 at 04:03 PM Author Report Share #562760 Posted July 17, 2014 at 04:03 PM 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 at 04:14 PM Report Share #562762 Posted July 17, 2014 at 04:14 PM $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 at 04:34 PM Author Report Share #562765 Posted July 17, 2014 at 04:34 PM 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 at 04:40 PM Report Share #562766 Posted July 17, 2014 at 04:40 PM (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 at 04:41 PM 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 at 04:55 PM Author Report Share #562768 Posted July 17, 2014 at 04:55 PM 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 at 05:29 PM Report Share #562770 Posted July 17, 2014 at 05:29 PM 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 at 08:12 AM Author Report Share #562805 Posted July 18, 2014 at 08:12 AM 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 at 08:41 AM Report Share #562809 Posted July 18, 2014 at 08:41 AM 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