2015-09-14 3 views
0

Je dispose d'un fichier qui ressemble à ce qui suit:Lire hexadécimal du fichier avec Scilab

Time M1:Address 480008C0 
0 79F9446F 
0.000125 7AE7446B 
0.00025 7BA8446F 
... 

Il est à 2 nombres séparés par un onglet, on est un nombre hexadécimal. Je cherche à les lire dans un tableau décimal dans Scilab. J'ai essayé d'ouvrir et de lire le fichier comme suit:

u=mopen('proper_log_with_fail.txt','r'); // open the file for reading 
s = mscanf(u, '%s'); // Forget the first line 
[time,val]=mfscanf(u,'%e\t%x'); // Get the second line 

donc je ne suis pas toujours capable de lire toutes les valeurs ...? Je ne peux même pas lire la première chaîne? Est-ce que je fais quelque chose de super évident?

+0

Ma réponse a-t-elle fonctionné pour vous? – spoorcc

+0

@ user1149326 Je n'ai pas encore eu l'occasion de l'essayer. Mais merci. –

Répondre

2

Peut-être une faute de frappe, mais pour la première ligne vous utilisez mscanf qui devrait être mfscanf pour lire à partir du fichier. Lorsque vous modifiez cela, cela montre que votre première ligne ne correspond pas, notez que %s correspond seulement à un mot, puis s'arrête à l'espace suivant. Pour lire (et supprimer) la première ligne, utilisez mgetl et dites-lui de lire 1 ligne. Si le reste du fichier d'entrée est formaté de la même manière, vous pouvez utiliser l'argument niter de mfscanf pour continuer à correspondre jusqu'à la fin du fichier (EOF).

file_path = 'proper_log_with_fail.txt'; 

// open the file for reading 
fd=mopen(file_path,'r'); 

// Read/display header line 
number_of_lines_to_read = 1; 
header = mgetl(fd, number_of_lines_to_read); 
disp(header); 

// Scan all lines up until EOF 
niter = -1 
s = mfscanf(niter, fd, '%e %x'); 
disp(s) 

// Close the file after reading 
mclose(fd)