2010-06-18 5 views
0

J'ai un scénario dans lequel l'utilisateur télécharge un fichier sur le système. Le seul fichier que le système comprend dans un fichier CSV, mais l'utilisateur peut télécharger n'importe quel type de fichier, par exemple: jpeg, doc, html. J'ai besoin de lancer une exception si l'utilisateur télécharge autre chose que le fichier CSV.Comment trouver si le fichier est un fichier CSV?

Quelqu'un peut-il me faire savoir comment puis-je savoir si le fichier téléchargé est un fichier CSV ou non?

+0

Quel langage de programmation comptez-vous utiliser? – abatishchev

+0

Quelle langue utilisez-vous? Est-ce une application Web ou Windows? Quelle langue utilisez-vous? – hgulyan

+0

J'utilise Java et c'est une application web. – Mithun

Répondre

0

Je peux penser à plusieurs méthodes.

Une façon est d'essayer de décoder le fichier en utilisant UTF-8. (Ceci est construit en Java et est probablement construit en .NET aussi.) Si le fichier décode correctement, alors vous savez au moins qu'il s'agit d'un fichier texte quelconque. Une fois que vous savez qu'il s'agit d'un fichier texte, analysez les champs individuels de chaque ligne et vérifiez que vous obtenez le nombre de champs que vous attendez. Si le nombre de champs par ligne est incohérent, vous pourriez avoir un fichier qui contient du texte mais qui n'est pas organisé en lignes et champs.

Sinon, vous avez un fichier CSV. Ensuite, vous pouvez valider les champs.

+0

Je me demandais: pourquoi cette réponse était-elle inutile? J'ai analysé les fichiers CSV dans mes propres programmes et j'ai fait exactement ce que j'ai décrit. –

+0

Salut Willis, c'était une suggestion très utile. Je suis en mesure de valider le fichier CSV en fonction de vos entrées .. Merci pour votre entrée ... :-) – Mithun

0

Je ne sais pas si vous pouvez dire à 100% certain de quelque façon, mais je suggère que les premières validations doivent être:

  1. est l'extension de fichier .csv
  2. le comte nombre de virgules dans le fichier par ligne, il devrait normalement y avoir le même nombre de virgules sur chaque ligne du fichier pour qu'il soit un fichier CSV valide. (Comme l'a dit Jkramer, cela ne fonctionne que si les fichiers ne peuvent pas contenir de virgules entre guillemets).
+0

Le point 2 n'est pas complètement vrai. Pour un, un CSV peut utiliser différents délimiteurs. Par exemple, je vois le point-virgule (;) beaucoup plus souvent utilisé dans CSV que la virgule. Et 2ème, CSV peut contenir des délimiteurs dans des valeurs entre guillemets. Par exemple: foo, bar, "baz, quux", ... (la troisième commande entre les guillemets ne serait pas reconnue comme demiliter par un analyseur CSV). – jkramer

+1

Je suis d'accord que toutes les lignes ne contiendront pas le même nombre de virgules, mais par définition, un fichier de valeurs séparées par des virgules utilise des virgules comme délimiteur, et non des points-virgules. –

6

Si vous utilisez un analyseur CSV de bibliothèque, tout ce que vous avez à faire est d'attraper les erreurs qu'il déclenche.

Si l'analyseur CSV que vous utilisez est robuste à distance, il génère des erreurs utiles s'il ne comprend pas le format du fichier.

+0

Je pense que c'est la meilleure façon, en essayant de lire le fichier en tant que fichier csv - si elle échoue, il n'a évidemment pas le format csv. –

0

S'il s'agit d'une application Web, vous pouvez vérifier l'en-tête HTTP de type de contenu envoyé par le navigateur lors du téléchargement/de la publication d'un fichier via un formulaire. S'il existe une liaison pour la langue que vous utilisez, vous pouvez également essayer d'utiliser libmagic, ce qui permet de reconnaître les types de fichiers. Par exemple, l'outil UNIX file l'utilise.

http://sourceforge.net/projects/libmagic/

7

fichiers CSV varient beaucoup, et ils pourraient tous être appelés, légitimement, des fichiers CSV.

Je suppose que votre approche n'est pas la meilleure, la bonne approche serait de dire si le fichier téléchargé est un fichier texte l'application peut analyser au lieu de cela, c'est un fichier CSV ou non.

Vous signalez des erreurs lorsque vous ne pouvez pas analyser le fichier, que ce soit un fichier JPG, MP3 ou CSV dans un format que vous ne pouvez pas analyser. Pour ce faire, j'essaierais de trouver une bibliothèque pour analyser différents formats de fichiers CSV, sinon vous aurez un long chemin à parcourir pour écrire de nombreux types de fichiers CSV (ou restreindre la flexibilité de l'application en prenant en charge quelques formats CSV) .)

Une telle bibliothèque Java est opencsv

+0

+1 pour la recommandation d'utiliser une bibliothèque. Analyser CSV est quelque chose qui semble très facile au début, jusqu'à ce que vous ayez besoin de commencer à gérer des valeurs entre guillemets et des données mal formées. –

0

essayez celui-ci:

String type = Files.probeContentType(Paths.get(filepath)); 
Questions connexes