2017-03-27 1 views
1

J'ai un fichier de données contenant plus d'un million de lignes composé de 16 nombres entiers (cela n'a pas vraiment d'importance) et j'ai besoin de traiter les lignes dans Octave. Évidemment, il est impossible de charger le fichier entier. Comment puis-je charger uniquement une ligne spécifique?Charger uniquement une ligne spécifique

J'ai pensé deux possibilités:

  • je manqué quelque chose dans docs de simples E/S
  • je convertir le fichier en un CSV et utiliser certaines des csvread fonctionnalités
+0

Est-ce une ligne arbitraire au milieu d'un fichier? – Suever

+0

Oui, c'est. Le but est de faire un cycle à travers les lignes au lieu de charger le fichier entier. –

+0

Donc, vous voulez juste faire quelque chose ligne par ligne? – Suever

Répondre

3

Si vous souhaitez parcourir le fichier, ligne par ligne, vous pouvez ouvrir le fichier, puis utiliser fscanf pour analyser chaque ligne.

fid = fopen(filename); 

while true 
    % Read the next 16 integers 
    data = fscanf(fid, '%d', 16); 

    % Go until we can't read anymore 
    if isempty(data) 
     break 
    end 
end 

Si vous voulez que chaque ligne comme une chaîne, vous pouvez utiliser à la place fgetl pour obtenir chaque ligne

fid = fopen(filename); 

% Get the first line 
line = fgetl(fid); 

while line 
    % Do thing 

    % Get the next line 
    line = fgetl(fid); 
end