Courte question: Comment puis-je détecter automatiquement si un fichier CSV comporte des en-têtes dans la première rangée?Présélection automatique des en-têtes CSV dans un fichier
Détails: J'ai écrit un petit moteur d'analyse CSV qui place les données dans un objet auquel je peux accéder en tant que (approximativement) une base de données en mémoire. Le code original a été écrit pour analyser CSV tiers avec un format prévisible, mais j'aimerais pouvoir utiliser ce code plus généralement. J'essaie de trouver un moyen fiable de détecter automatiquement la présence d'en-têtes CSV, afin que le script puisse décider d'utiliser la première ligne du fichier CSV en tant que clés/noms de colonnes ou commencer à analyser les données immédiatement. Comme tout ce dont j'ai besoin est un test booléen, je pourrais facilement spécifier un argument après avoir inspecté moi-même le fichier CSV, mais je préférerais ne pas le faire (allez à l'automatisation).
J'imagine que je devrais analyser le premier 3 à? lignes du fichier CSV et recherchez un motif quelconque à comparer aux en-têtes. Je vais avoir des cauchemars de trois cas particulièrement mauvaises dans lesquels:
- Les en-têtes contiennent des données numériques pour une raison quelconque
- Les premières lignes (ou une grande partie du CSV) sont nulles
- Il têtes et les données semblent trop semblables pour leur dire à part
Si je peux obtenir une « meilleure estimation » et ont l'analyseur échoue avec une erreur ou cracher un avertissement si elle ne peut pas décider, c'est OK. Si c'est quelque chose qui va coûter énormément cher en termes de temps ou de calcul (et qui prend plus de temps que ce qui est censé me sauver), je vais heureusement abandonner l'idée et recommencer à travailler sur des «choses importantes».
Je travaille avec PHP, mais cela me semble plus une question algorithmique/computationnelle que quelque chose qui est spécifique à l'implémentation. S'il y a un algorithme simple que je peux utiliser, génial. Si vous pouvez me diriger vers une théorie/discussion pertinente, ce serait génial aussi. S'il y a une bibliothèque géante qui traite le langage naturel ou 300 types différents d'analyse, cela ne m'intéresse pas.
Je ne pense pas que vous serez en mesure d'atteindre la «fiabilité» en devinant les en-têtes. Sauf si vos données sont assez cohérentes (par exemple, il s'agit de tous les chiffres et facile à discerner les en-têtes et les données). –
Eh bien tout test doit seulement détecter avec succès un en-tête sur une colonne, et le résultat peut ensuite être appliqué à l'ensemble du fichier. S'il existe un ensemble raisonnable de critères pouvant être appliqués à au moins certains types de données/colonnes, il peut toujours fonctionner la plupart du temps. – cbednarski