Dans l'exemple de fichier texte ci-dessous, si la colonne 3 contient un 1
, les données correspondantes de la colonne 2 doivent être fusionnées avec les données de la ligne précédente dans la colonne 2. Par exemple, 40
dans la ligne 2 doit être ajouté au 10
dans la ligne 1, la ligne 2 doit être définie sur 0
(comme indiqué dans le fichier texte modifié). Le problème avec mon code ci-dessous est qu'il enregistre uniquement les changements dans les données actuelles time(i,1)
mais pas les modifications apportées pour les données précédentes.Comment puis-je fusionner ces données dans MATLAB?
original.txt
a time c
1 10 0
2 40 1
3 20 0
4 11 0
5 40 1
modified.txt
a time c
1 50 0
2 0 0
3 20 0
4 51 0
5 0 0
fid=fopen('data.txt');
A=textscan(fid,'%f%f%f');
a =A{1};
time=A{2};
c =A{3};
fclose(fid);
fid=fopen('newData.txt','wt');
for i=1:size(a)
if c(i,1)==1
time(i-1,1)=time(i,1)+time(i-1,1); % merge the time of the current and the previous
time(i,1) =0; %set the time to 0
array = []; %empty the array
array = [a(i,1) time c(i,1)]; add new data
format short g;
fprintf(fid,'%g\t %g\t %g\n',array);
end
fclose(fid)
Merci gnovice..if J'ai des milliers de lignes est-il possible d'utiliser le vecteur? – Jessy
@Jessy: Le code ci-dessus devrait gérer les vecteurs avec des milliers d'éléments sans aucun problème. Un avertissement, cependant: si 'c' a les uns à côté des autres, vous pouvez obtenir des résultats inattendus. Par exemple, 'time = [20; dix; 10]; 'et' c = [0; 1; 1]; 'vous donnera un résultat de' time = [30; 0; 0]; ', pas' time = [30; dix; 0]; Est-ce que ça va être OK? – gnovice
@gnovice: Merci. Mais j'ai vraiment besoin du temps = [30; 10; 0] :( – Jessy