J'utilise la bibliothèque CSV de Ruby pour analyser certains CSV. J'ai un fichier CSV apparemment bien formé que j'ai créé en exportant un fichier Excel comme CSV. P>
Cependant, Il n'y a pas de virgule indispensable ni de guillemets dans le fichier, ni autre chose que je ne peux voir que cela pourrait causer des problèmes. P>
Je soupçonne que le problème pourrait être de faire avec les fins de la ligne. Je suis capable d'analyser les données saisies manuellement via un éditeur de texte (Aquamacs). C'est juste lorsque j'essaie avec des données exportées d'Excel (pour OS X) que des problèmes se produisent. Lorsque j'ouvre le CSV exporté dans VIM, tout le texte apparaît sur une ligne, avec de la DOCS, il semble que vous puissiez fournir csv.open (nom de fichier, 'r') code> provoque un csv :: illegalformatRorRor code>. p>.
^ m code> apparaissant entre les lignes. P>
ouvert code> avec un séparateur de ligne; Cependant, je ne suis pas sûr de ce que cela devrait être dans ce cas. P>
6 Réponses :
Essayez: comme CANTLIN Notes, pour Ruby 2 C'est: P> csv.open ('nom de fichier', 'r' ,? ,? \ r) code> CSV.new('file.csv', 'r', :col_sep => ?,, :row_sep => ?\r)
Merci beaucoup - j'aurais pu t'avoir évoqué deux fois pour deux bits utiles d'informations.
Pouvez-vous clarifier ce que ?,? \ R code> fait? Merci!
X Renvoie le point de code pour le caractère X, c'est-à-dire un numéro. Pour une raison quelconque, c'est ce que CSV.Open s'attend à voir. Nous spécifions donc le séparateur de champ comme , code> et le séparateur d'enregistrement comme autrement gênant ^ m, alias 015, alias 13, alias CR. BTW, la commande de substitution VIM fonctionne car \ r code> signifie CR dans le motif mais NL dans le remplacement, ce n'est donc pas en réalité un non-OP.
Merci pour cela, très utile. Juste pour noter que la signature du constructeur de CSV a changé à partir de Ruby 1.9.2, l'utilisation de ce qui précède serait csv.new ("file.csv '," r "," r',: col_sep =>? , row_sep = >? \ r) code>.
"" " Lorsque j'ouvre le CSV exporté dans VIM, tout le texte apparaît sur une ligne, ^ M apparaissant entre les lignes. P>
de la DOCS, il semble que vous puissiez fournir une ouverture avec un séparateur de ligne; Cependant, je ne suis pas sûr de ce que cela devrait être dans ce cas. "" " p>
lire une phrase ... ^ m signifie que le clavier Ctrl-M aka '\ x0d' (M est la 13ème lettre de l'alphabet ASCII; 0x0d == 13) AKA ASCII CR (retour chariot) AKA '\ R' ... eow Quels Macs utilisés pour utiliser comme terminateur de ligne avant OS X. P>
Une autre option consiste à ouvrir le fichier CSV ou à la feuille de calcul d'origine dans Excel et à enregistrer comme "Valeurs séparées par la virgule Windows" plutôt que "Valeurs séparées par la virgule". Cela émettra le fichier avec des terminaisons de ligne que FasterCSV est capable de comprendre. p>
Stripping \ r Les caractères semblaient fonctionner pour moi
Il semble que des versions plus récentes de l'analyseur CSV et / ou de tout composant utilisent des terminaisons de ligne de lecture DOS / Windows sans problèmes. Mac OS X's Stock One (pas sûr que la version) n'était pas la coupe, installée Ruby 2.0.0 et elle a analysé le fichier, sans les arguments spéciaux ... P>
J'ai eu un problème similaire. J'ai eu une erreur: Le problème était que le fichier avait des terminaisons de ligne Windows, qui sont bien sûr autre que UNIX. Ce qui m'a aidé à définir Row_sep: "\ r \ n": p>