Extraire chaine de caratcère via matlab

karaq Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
 O!!!u!!!i!!!s!!!t!!!i!!!t!!!i -
Bonjour,

je suis nouveau donc d'avance je m'excuse si ma mise en page ne correspond pas à ce qui est attendu, je reste à l'écoute de toutes remarques à ce sujet.

Sinon pour rentrer dans le vif du sujet mon problèmeest le suivant:

J'ai un fichier trace dans lequel je retrouve divers informations concernant le déroulement d'une éxpérimentation.

Chaque début de ligne commence par l'heure avec une précision à la ms du genre "17:25:42.658". Cette information a son importance.
Ce que je souhaite c'est pouvoir récupérer cette information sur 2 lignes précise. Le truc c'est que le fichier peut être composer de plus de 10000 lignes.

Je souhaite donc extraires les lignes qui ont pour info une valeur en Héxa précise.

Par exemple isoler les lignes qui on la valeur "x035". Pour que je puisse derrière récupérer l'heure qui est défini en début de ligne.

Je vois comment faire sous linux mais le hic c'est que je dois faire ça sous matlab.
y a pas une option avec "fgetl" qui permette d'obtenir les lignes ayant un caractère précis.

Je reste à disposition pour toutes autres informations merci à vous tous
A voir également:

5 réponses

O:u:i:s:t:i:t:i
 
Je n'ai pas connaissance d'une telle option et la page d'aide de fgetl n'en fait pas mention.

Mais tu peux utiliser fgetl puis le regexp dont je parlais.

fid = fopen('myfile.txt','r');
tline = fgetl(fid);
nl = 1;
while ischar(tline)
if size(regexp(tline,'.*x025.*','match'),1)~=0; disp(['Line ' num2str(nl) ' : ' tline]); end;
nl=nl+1;
tline = fgetl(fid);
end
fclose(fid);

Ou pour enregistrer les lignes dans un tableau de cellules de caractères...

clear M;
fid = fopen('myfile.txt','r');
tline = fgetl(fid);
nl = 1;
while ischar(tline)
if size(regexp(tline,'.*x025.*','match'),1)~=0; M{nl}=tline; end;
nl=nl+1;
tline = fgetl(fid);
end
fclose(fid);

Ou pour enregistrer les lignes dans un fichier...

fid = fopen('myfile.txt','r');
fidout = fopen('myfileout.txt','w');
tline = fgetl(fid);
nl = 1;
while ischar(tline)
if size(regexp(tline,'.*x025.*','match'),1)~=0; fprintf(fidout,'%sn',tline); end;
nl=nl+1;
tline = fgetl(fid);
end
fclose(fid);
fclose(fidout);

Pour finir, si tu es sûr que le programme ne sera utilisé que sous une machine unix ou linux (mac aussi), tu peux utiliser les commandes relatives à l'OS, il suffit de les faire précéder d'un point d'exclamation.

!grep 'x025' myfile.txt > foundlines.txt

Bye
1
Utilisateur anonyme
 
Hi

Tu peux te débrouiller de la même manière qu'avec linux en trifouillant textscan et regexp je pense, mais il y a peut-être mieux.

Quelque chose de ce genre :

fid=fopen('myfile.dat','r');
M=textscan(fid,'%s','delimiter','\n');
M=regexp(M{1},'.*x035.*','match');
M=strvcat([M{:}]);
fclose(fid);

Pense à demander de l'aide ailleurs que sur ce forum miteux la prochaine fois, si tu attends après les habitués pour te répondre, tu risques d'attendre longtemps, il n'y a que des incompétents ici. Les chances d'obtenir une réponse intelligente à une question par là sont quasi nulles, les seuls cas où cela peut arriver, c'est quand quelqu'un tombe malencontreusement sur ton sujet lors d'une recherche fortuite sous un moteur de recherche, comme ce fut le cas pour moi.

Bye
0
O!!!u!!!i!!!s!!!t!!!i!!!t!!!i
 
Petite erreur, j'ai donné deux fois le même lien pour la page d'aide, voici textscan.
0
karaq Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pour ton aide, je vais essayer ça.
On m'a parlé de la fonction "fgetl" mais en mettant une condition ça te dit quelque chose.
J'ai toujours utilisé cette fonction sans condition. je sais pas comment lui dire de prendre la ligne avec le caractère "x025" par exemple. Est-ce possible?
En tout cas merci pour ton aide au combien précieuse
0
karaq Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pour toutes tes infos
je vais me dépatouiller avec ce que tu m'as donné
et je te tiens au jus merci en tout cas
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ooouuuiiissstttiiitttiii
 
OK !
Petite erreur dans ce que j'ai écrit en dernier cela dit : fprintf(fidout,'%s\n',tline);
J'avais oublié le backslash.
Bye
0