Matlab ne divise pas correctement les lignes délimitées par des tabulations avec des espaces entre les mots. Comment faire fonctionner cela?
Par exemple, disons que j'ai un fichier avec ces deux lignes que je veux extraire, la première est une ligne d'en-tête et la seconde est une ligne de données:
splitted = split(line, '\t')
(les délimiteurs sont des tabulations mais je les montre ici avec plusieurs espaces)
J'ai écrit un analyseur personnalisé qui devrait aboutir à un tableau avec:
field1 field2 field3 ______ ______ ______ 14 A String
Ce que je vois est quelque chose comme:
field1 field2 field3 ______ ______ ______ 14 A String 34.1
J'ai une solution utilisant la ligne de la fonction split () par ligne avec fgetl , cela fonctionne s'il n'y a pas d'espaces dans les entrées. Faire:
#DATA_NAME field1 field2 field3 DATA_NAME 14 A String 34.1
ne semble pas fonctionner. J'ai fait quelques vérifications, et les délimiteurs ne == '\ t' ...
(Je dois utiliser mon analyseur personnalisé car il y a beaucoup de types de données différents dans un fichier, chacun avec différents nombres de colonnes et différents en-têtes.)
3 Réponses :
char (09) au lieu de '\t' Je ne peux pas les lister exactement mais j'ai remarqué que certains analyseurs de chaînes Matlab reconnaissent '\ t' comme un caractère TAB correct, mais certains autres ne le reconnaissent pas et le traitent comme 2 caractères séparés '\' et 't' .
exemple:
>> double('\t')
ans =
92 116
>> double(tabc)
ans =
9
Cela m'a causé des problèmes même en utilisant textcan dans le passé, donc maintenant sauf pour fprintf où je sais que ça marche, partout ailleurs j'utilise toujours le code ascii 09 pour le caractère de tabulation, au lieu de la notation abrégée '\ t' .
Par exemple:
tabc = char(09) ; C= textscan( s , '%s' , 'delimiter',tabc ) ; % or in any other function using 'delimiters'
Et pour illustrer le premier exemple:
>> double('\t')
ans =
92 116
Cela fonctionnera pour le fractionnement par tabulation:
splitted = strsplit(aLineOfText, '\t');
(Cela traite les lignes différemment et m'a fait retravailler mon script, mais semble fonctionner correctement.)
p>