comment savoir si les champs du fichier csv sont délimités par des tabulations ou délimités par des virgules
comment savoir si le fichier csv champs sont délimités par des tabulations ou des virgules. J'ai besoin de php de validation pour cela. Quelqu'un peut-il aider plz. Merci à l'avance.
source d'informationauteur SowmyAnil
Vous devez vous connecter pour publier un commentaire.
Il est trop tard pour répondre à cette question, mais j'espère que ça aidera quelqu'un.
Voici une simple fonction qui retourne un délimiteur d'un fichier.
Utiliser cette fonction comme indiqué ci-dessous:
P. S j'ai utilisé preg_split() au lieu de explode() parce que explode('\t', $valeur) ne donnera pas un bon résultat.
Mise à JOUR: Merci à @RichardEB signalant un bug dans le code. J'ai mis à jour aujourd'hui.
Voici ce que je fais.
Cela ne fonctionnera pas 100% du temps, mais c'est un bon point de départ. Au minimum, il permettra de réduire le nombre de séparateurs (le rendant plus facile pour les utilisateurs à sélectionner le bon séparateur).
Il n'est pas 100% fiable pour déterminez ce. Ce que vous pouvez faire est de
Je suis juste en comptant les occurrences des différents délimiteurs dans le fichier CSV, l'un avec la plus devraient probablement être le bon séparateur:
Dans ma situation, les utilisateurs fournissent des fichiers csv qui sont ensuite saisis dans une base de données SQL. Ils peuvent enregistrer une feuille de calcul Excel que les virgules ou les fichiers délimités par des tabulations. Un programme de conversion de la feuille de calcul pour SQL besoins pour identifier automatiquement si les champs sont séparés par des tabulations ou des virgules
De nombreux Excel csv d'exportation ont, en-têtes de champs sur la première ligne. L'en-tête de test est peu susceptible de contenir des virgules, sauf comme un séparateur. Pour ma situation, j'ai compté les virgules et les onglets de la première ligne et l'utiliser avec le plus grand nombre afin de déterminer si elle est au format csv ou onglet
J'ai utilisé @Jay Bhatt est la solution pour trouver un fichier csv est un délimiteur, mais il ne fonctionne pas pour moi, alors j'ai appliqué quelques corrections et des commentaires, pour que le processus soit plus compréhensible.
Voir ma version de @Jay Bhatt fonction:
Personnellement, j'utilise cette fonction pour aider à analyser automatiquement un fichier avec PHPExcelet il fonctionne à merveille et rapide.
Je recommande l'analyse d'au moins 10 lignes, pour des résultats plus précis. Personnellement, je utiliser avec 100 lignes, et c'est en travaillant rapidement, aucun des retards ou des gal. Les lignes plus vous analysez, plus le résultat est précis obtient.
NOTE: Ceci est juste une modification de la version de @Jay Bhatt solution à la question. Tous les crédits va à @Jay Bhatt.
De côté à partir de la simple réponse que c sv fichiers sont toujours séparées par des virgules, c'est dans le nom, je ne pense pas que vous pouvez venir avec tout dur règles. Les deux TSV et CSV fichiers sont suffisamment lâche spécifié que vous pouvez venir avec des fichiers qui seraient acceptables que ce soit.
(En supposant \t == TAB)
Comment voulez-vous décider si c'est TSV ou CSV?
Quand je l'ai sortie un fichier TSV je auteur les onglets à l'aide de \t la même méthode, à un auteur d'un saut de ligne comme \n donc, cela étant dit, je pense que méthode pourrait être comme suit:
Je Suppose que c'est peut-être pas la bonne manière, car vous pourriez avoir des onglets et des virgules dans le contenu lui-même. C'est juste une idée. En utilisant des expressions régulières peut-être mieux, même si je ne suis pas trop doué.
Merci à tous pour vos contributions, j'ai fait la mienne à l'aide de votre astuces : preg_split, fgetcsv, boucle, etc.
Mais j'ai mis en place quelque chose qui a été étonnamment pas ici, l'utilisation de fgets, au lieu de lire le fichier en entier, bien mieux si le fichier est lourd!
Voici le code :
vous pouvez simplement utiliser la fgetcsv(); de PHP natif de la fonction de cette façon:
Vous pouvez également utiliser fgetcsv (http://php.net/manual/en/function.fgetcsv.php) en passant un paramètre de délimiteur. Si la fonction retourne false, elle signifie que la somme de paramètre de délimiteur n'était pas celui de droite
échantillon pour vérifier si le séparateur est";"
Comment parler de quelque chose de simple?
C'est ma solution.
Ses œuvres, si vous savez le nombre de colonnes que vous attendez.
Enfin, le caractère de séparation est l' $actual_separation_character
Si vous avez un très grand exemple de fichier de GO, à la tête de la première quelques lignes, mettre dans un fichier temporaire. Ouvrir le fichier temporaire dans vi
Façon la plus simple je réponds que c'est de l'ouvrir dans un éditeur de texte, ou dans TextMate.