La lecture de gros fichiers csv avec des chaînes de caractères contenant des virgules comme un champ
J'ai un grand .fichier csv (~26000 lignes). Je veux être en mesure de le lire dans matlab. Un autre problème est qu'il contient une collection de les chaînes délimitées par des virgules dans un des champs.
Je vais avoir des difficultés à le lire. J'ai essayé des trucs comme tdfread, qui ne marchera pas ici. Toutes les astuces avec textscan je devrais être au courant?
Est-il un autre moyen?
pourriez-vous poster au moins une ligne de données..
Je pensais que matlab pu lire les cv en mode natif. la commande de chargement ne fonctionne pas par défaut? J'aurais juré que j'ai vu quelqu'un la charge d'un cv, avant.
Si vous avez accès à l'application qui exporte les données, vous pouvez l'exporter en tant que délimité par des tabulations (ou quelque chose d'autre que délimité par des virgules).
Oui, certaines données pourraient être utiles. Spécialement à ce champ par des virgules. Est-il dans les doubles guillemets? @Chris: Matlab a CSVREAD fonction, mais il peut lire que les valeurs numériques. Il s'arrête lorsqu'il détecte des données de texte. Vous pouvez spécifier la plage de colonnes de chiffres, dans ce cas, les chaînes seront ignorés.
1 563355 62701 0 1235000081 php,erreur,gd,traitement de l'image 220 2 563372 67183 2 1235000501 Qui est une ligne de données. Comme vous pouvez le remarquer, il y a une collection de chaînes de caractères. Je vous remercie.
Je pensais que matlab pu lire les cv en mode natif. la commande de chargement ne fonctionne pas par défaut? J'aurais juré que j'ai vu quelqu'un la charge d'un cv, avant.
Si vous avez accès à l'application qui exporte les données, vous pouvez l'exporter en tant que délimité par des tabulations (ou quelque chose d'autre que délimité par des virgules).
Oui, certaines données pourraient être utiles. Spécialement à ce champ par des virgules. Est-il dans les doubles guillemets? @Chris: Matlab a CSVREAD fonction, mais il peut lire que les valeurs numériques. Il s'arrête lorsqu'il détecte des données de texte. Vous pouvez spécifier la plage de colonnes de chiffres, dans ce cas, les chaînes seront ignorés.
1 563355 62701 0 1235000081 php,erreur,gd,traitement de l'image 220 2 563372 67183 2 1235000501 Qui est une ligne de données. Comme vous pouvez le remarquer, il y a une collection de chaînes de caractères. Je vous remercie.
OriginalL'auteur K_U | 2010-01-31
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas sûr de ce qui est de la génération de votre fichier CSV, mais c'est votre problème.
La pointe d'un fichier CSV, c'est que le fichier lui-même désigne la séparation des champs. Si le texte de la CSV contient des virgules, puis rien que vous pouvez faire vous aidera. Comment un programme de savoir quand le texte dans un seul champ contient des virgules, ou lorsque la virgule est un séparateur de champ?
Bon CSV aurait un qualificateur de texte. Certains générateurs/lecteurs vous donne la possibilité d'en utiliser un. La norme qualificateur de texte est un " (citation). Ses sautes d', cependant, parce que votre texte peut contenir ceux, trop.
De nouveau, son tout sur la génération de bon CSV contenu.
Vous ne pouvez pas différencier les délimiteurs de champ à partir des virgules dans le texte quand il y a des virgules dans les champs et pas de texte de qualification. Êtes-vous en mesure de parler à ceux qui génèrent ce CSV et de les amener à utiliser un identificateur de texte?
OriginalL'auteur Gabriel McAdams
Il y a une chance que xlsread ne vais pas vous donner la réponse que vous attendez -- les chaînes apparaissent toujours dans les mêmes colonnes, par exemple? Je pense (comme tout le monde semble 🙂 qu'il serait plus robuste de l'utiliser juste
puis textscan
ou tout simplement
fgetl
(l'exemple dans l'aide est parfait).Après que vous pouvez faire ligne par ligne, au traitement, à l'aide de textscan de nouveau sur le contenu du texte de chaque ligne, par exemple, est un beau, rapide de façon à obtenir une cellule-matrice qui permettra à l'analyse rapide de chaque ligne.
OriginalL'auteur Nivag
Vous avez un problème parce que vous êtes en train de lire dans un .csv, et vous avez des virgules à l'intérieur de vos données. Vous pouvez l'obtenir dans Excel et de manipuler la date, éventuellement extraire l'indésirables des virgules avec des formules Excel. Je travaille avec .des fichiers csv pour les DB importations tout à fait un peu. J'imagine matLab a des règles similaires, qui est - pas de virgules dans vos données.
Pouvez-vous nous en dire plus au sujet de vos données? Existe-il des virgules partout, notre seule colonne? Peut-être que vous pouvez le lire dans que délimités par des tabulations?
En fait, si vous en avez un .xls vous pouvez avoir des virgules à l'intérieur de vos cellules. À ce stade, vous pouvez exécuter les fonctions pour extraire les virgules, puis les enregistrer en tant que .csv
J'ai essayé de convertir en xls, mais le nombre de lignes dépasse de loin la valeur limite max. C'est en fait ~263000. Je pense xls a une limite maximale de 65535 par ~277 ou quelque chose. J'ai réussi à le lire en utilisant xlsread sur le fichier csv. Merci
Excel ne peut avoir de virgule dans le champ parce qu'ils sont à la définition d'un identificateur de texte (") pour ce champ. Sans l'un, même Excel ne peut pas comprendre qu'il doit être un champ contenant des virgules (note de côté: Excel 2007 vous permet de plus d'un million de lignes)
OriginalL'auteur tpow
Êtes-vous à l'aide d'un système Unix? La raison que je demande est que vous pouvez utiliser une ligne de commande de fonction, telle que la
sed
et des expressions régulières pour nettoyer ces fichiers de données avant de les transmettre dans Matlab. Voici une lien qui explique comment le faire exactement ce que vous cherchez.OriginalL'auteur John Bellone
Depuis, comme d'autres l'ont observé, votre fichier CSV avec des virgules à l'intérieur de ce que vous considérez comme un seul champ, ça va être dur de convaincre Matlab que c'est vraiment un seul champ. Je pense que la meilleure stratégie est d'aller lire une ligne à la fois, dans une chaîne agissant comme un tampon, et à le traduire, champ par champ, dans les variables ou d'autres structures de données que vous souhaitez. Depuis Matlab a intégré expression régulière capacités, cela ne devrait pas être trop dur.
Et, comme d'autres l'ont déjà suggéré, l'affichage d'un échantillon de vos données pourraient nous aider à vous aider.
OriginalL'auteur High Performance Mark
Une solution facile est:
Bien sûr, vous pouvez également effectuer les opérations suivantes:
maintenant que vous avez chargé les données en tant que jeu de données. Un moyen facile d'obtenir une colonne de 1, par exemple, est
double(données(1))
OriginalL'auteur Stanislav