Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá a todos boa noite.
Estou em um projeto PHP (Yii framework) no qual preciso importar um arquivo CSV com dados de produtos e trabalhar com os dados presentes no mesmo.
Gostaria de saber se existe algum recurso do PHP (ou mesmo do Yii) que possibilite identificar o caractere que separa as colunas no arquivo CSV.
A pergunta se deve ao fato de que não consigo diferenciar uma vírgula presente em uma descrição de produto da vírgula que separaria as colunas do arquivo.
Desde já agradeço.
Olá EdCesar.
Na verdade os arquivos CSS virão dos usuários do sistema, logo, poderão vir arquivos separados por ; ou , (mais comuns)
Ex: Produto;Descrição;Cor;Qtde
Caneta;Esferográfica;Preta;50
Caneta; Esferográfica, escrita fina;Azul;30
No caso acima, sendo o separador o ponto-e-vírgula não terrei problemas. Mas se o separador for a vírgula:
Produto,Descrição,Cor,Qtde
Caneta,Esferográfica,Preta,50
Caneta,Esferográfica, escrita fina,Azul,30
Esse é o ponto: Identificar qual foi o separador utilizado pelo usuário.
Sem um padrão é muito difícil encontrar uma solução. Neste caso, se você tivesse uma lista de todos os itens possíveis, poderia ignorar os que não estivesse na lista, e então saberia quando começa e termina uma coluna. Mas isso seria uma "gambi" que estaria resolvendo um problema que deveria ter sido resolvido antes.
Provavelmente você não tem o controle da criação desse arquivo. Na minha opinião este arquivo não deveria usar virgula como separador, já que existe campos com virgula, então acho que é questão de passar o caso para os responsáveis, para que o arquivo fique padronizado com apenas um separador, que não seja a virgula.
Eu já mexi muito com importação de arquivos para o banco, se tiver alguma forma CORRETA de fazer o que você quer, sem alterar o arquivo, realmente gostaria de aprender :)
O MS Management Studio possui uma excelente ferramenta de importação e exportação, ela também não conseguiu resolver:

Por padrão os arquivos csv usam o ponto e vírgula como separador " ; "
Você esta dizendo que esta assim:
coluna1, coluna2, coluna3, vermelhor, azul, amarelo, coluna4
Rodrigo, se for isso, esse arquivo esta mal feito. Não tem como alterar para usar outro caracter para a separação, como o | por exemplo?