2013-04-15 4 views
0

Le myfile.m programme lit un fichier txt qui contient un total de 25 noms et numéros commeMatlab trop de sorties

exemple:

John doughlas 15986

Filip DUCH 357852

etc.

Le programme les convertit en

15986 Doughlas John 
357852 duch Filip 

Ceci est sans fonction, avec elle, je reçois trop de sorties.

Error message: 
Error using disp 
Too many output arguments. 

Error in red4 (line 26) 
    array = disp(All); 

Code original ci-dessous:

function array = myfile(~) 
if nargin == 0 
dirr = '.'; 
end 
answer = dir(dirr); 
k=1; 
while k <= length(answer) 
    if answer(k).isdir 
     answer(k)=[]; 
    else 
     filename{k}=answer(k).name; 
     k=k+1; 
    end 
end 
chose=menu('choose file',filename); 
namn = char(filename(chose)); 
fid = fopen(namn, 'r');  
R = textscan(fid,'%s %s %s'); 
x=-1;            
k=0;            
while x <= 24         
     x = k + 1;          
     All = [R{3}{x},' ',R{1}{x},' ',R{2}{x}]; 
     disp(All)          
     k = k + 1;         
end             
fclose(fid); 

Maintenant, j'ai obtenu beaucoup de bonnes réponses de personnes et des sites comme functions, mais je ne peux pas obtenir les résultats comme ci-dessus avec la fonction.

Je l'ai essayé de les combiner et obtenu des résultats:

y = 15986 & [a,z,b] = myfile 
y = 25 & myfile = x 
y = numbers name1,2,3,4 and so one & myfile = fprintf(All) 
y =      & I used results().namn, 
numbers name 1   & results().id, results().lastname 
y = 
numbers name 2 and so on. 

Le résultat est que je veux:

y = myfile 
y = 
15986 Doughlas John 
357852 duch Filip 

mise à jour: Modifier comme Eitan T dit, mais did't obtenir le résultat comme ci-dessus.

obtenu le résultat que:

John doughlas 15986 '

'Filip DUCH 357852'

function C = myfile()        
if nargin == 0 
    dirr = '.'; 
end 
answer = dir(dirr); 
k=1; 
while k <= length(answer) 
    if answer(k).isdir 
     answer(k)=[]; 
    else 
     filname{k}=answer(k).name; 
     k=k+1; 
    end 
end 
chose=menu('choose',filname); 
name = char(filname(chose)); 
fid = fopen(name, 'r'); 
C = textscan(fid, '%s', 'delimiter', ''); 
C = regexprep(C{1}, '(\w+) (\w+) (\w+)', '$3 $2 $1'); 
fclose(fid); 
+0

"avec cela je reçois trop de sorties". Voulez-vous dire un message d'erreur? Si oui, pourriez-vous l'inclure s'il vous plaît? – Alan

Répondre

1

Pourquoi boucles d'utilisation? Lire les lignes à la fois avec textscan et en utilisant regexprep pour manipuler les mots:

fid = fopen(filename, 'r'); 
C = textscan(fid, '%s', 'delimiter', ''); 
C = regexprep(C{1}, '(\w+) (\w+) (\w+)', '$3 $2 $1') 
fclose(fid); 

Le résultat est un réseau de cellules C, chaque cellule stockant une ligne. Pour votre exemple, vous obtenez un 2 × 1 matrice de cellules:

C = 
    '15986 doughlas John' 
    '357852 duch Filip' 

Je ne sais pas ce que vous voulez faire avec, mais si vous fournir plus de détails je peux améliorer ma réponse plus loin.

Espérons que cela aide!

Questions connexes