2009-11-06 2 views
2

Dans Matlab, après avoir créé un certain nombre de lignes et de les imprimer dans un fichier, j'ai la nécessité de supprimer une ligne et réécrire le reste des données à ce même fichier. Quand je le fais, les nouvelles données écrasent les données précédentes, mais comme les données sont plus courtes que l'original, il y a toujours des restes des données d'origine. Quelqu'un a-t-il une idée de la manière la plus efficace de supprimer ces données?supprimer les caractères de EOF lors de l'écriture du fichier dans Matlab

Voici un exemple simplifié de ce que je suis en train de faire:

fid = fopen('file.txt','w'); 
for i=1:10 
    fprintf(fid,'%i\r\t',i); 
end 
frewind(fid); 
for i=3:5 
    fprintf(fid,'%i\r\t',i); 
end 
fprintf(fid,'EOF'); 
fclose(fid); 

Je l'ai regardé partout, mais je ne peux pas à trouver la solution à ma question. Aucune suggestion?

+0

Quelle plate-forme que vous utilisez (Windows, Mac, Unix)? La meilleure option peut être d'appeler certaines commandes système à partir de MATLAB. – gnovice

+0

J'utilise à la fois Windows et Linux, donc je préfère ne pas utiliser les commandes spécifiques au système. – ServAce85

Répondre

3

sans utiliser les fichiers temporaires, vous pouvez effectuer les opérations suivantes:

fid = fopen('file.txt', 'wt'); 
for i=1:10 
    fprintf(fid, '%i\n', i); 
end 
frewind(fid); 
for i=3:5 
    fprintf(fid, '%i\n', i); 
end 
pos = ftell(fid);    % get current position in file 
fclose(fid); 

% read from begining to pos 
fid = fopen('file.txt', 'r'); 
data = fread(fid, pos); 
fclose(fid); 

% overwite file with data read 
fid = fopen('file.txt', 'w'); 
fwrite(fid, data); 
fclose(fid); 
0

impression "EOF" ne fonctionne pas - bien essayer!

Il y a système Unix appelle troncature et ftruncate qui fera que, étant donné soit un descripteur de fichier (tronquer) ou la poignée (ftruncate) dans le premier argument et une longueur désirée dans la seconde.

Je vais essayer et voir si Matlab prend en charge ftruncate. A défaut ... si pire est arrivé au pire, vous pouvez copier-écrire le fichier dans un nouveau fichier, l'arrêt et la fermeture du nouveau fichier lorsque vous appuyez sur ce que vous considérez la fin des données.

+0

Oui, j'ai imprimé « EOF » pour ma propre référence quand j'ouvre le fichier la prochaine fois pour lire des données en. Merci bien. Et la réponse est non, Matlab (au moins sous Windows) ne semble pas supporter ftruncate. – ServAce85

0

Pour donner suite à Carl Smotricz's suggestion d'utiliser deux fichiers, vous pouvez utiliser les commandes de Matlab DELETE et MOVEFILE pour éviter les appels système:

fid = fopen('file.txt','wt'); 
for i=1:10 
    fprintf(fid,'\t%i\r',i); 
end 
fclose(fid); 

fid = fopen('file.txt','rt'); 
fidNew = fopen('fileNew.txt', 'wt'); 
for i = 1:2 
    s = fgetl(fid); 
    fprintf(fidNew, '%s\r', s); 
end 
for i=4:10 
    fprintf(fidNew, '\t%i\r', i); 
end 
fclose(fid); 
fclose(fidNew); 

delete('file.txt'); 
movefile('fileNew.txt', 'file.txt') 
+0

À ce stade, je préfèrerais ne pas utiliser plus d'un fichier. Merci pour l'info si je décide de suivre cette route. – ServAce85

Questions connexes