Comment puis-je lire dans une série de chiffres à l'aide « textscan » dans MATLAB si le fichier est principalement du texte?

StackOverflow https://stackoverflow.com/questions/3620079

  •  26-09-2019
  •  | 
  •  

Question

J'ai un fichier texte qui ont une chaîne de 3 chiffres que je dois lire dans Matlab.

Par exemple:

#######################
#
#
#    Text Text Text
#
#
#######################

Blah blah blah = ####
Blah blah blah = ####
Blah blah blah = ####
Blah blah blah = ####
Blah blah blah = ####
Blah blah blah = ####


I_NEED_THIS_STRING =  1234.5 6789.0 1234.5 !Comment blah blah blah

Je dois lire dans ces 3 numéros dans un tableau.

AIDE S'IL VOUS PLAÎT.

Merci

Était-ce utile?

La solution

Si la plupart du fichier est hors de propos à votre demande, je vous suggère de pré-traitement avec votre dessus.

outil de langage de script favori ou ligne de commande pour trouver les lignes et utiliser textscan pertinentes ()

par exemple, à partir d'une coque rapide:.

grep ^I_NEED_THIS_STRING infile > outfile

Matlab:

fid = fopen('outfile');
C = textscan(fid, 'I_NEED_THIS_STRING = %f %f %f')
fclose(fid)

Consultez la documentation textscan pour plus de détails .

Autres conseils

Une autre solution consiste à utiliser IMPORTDATA lire le fichier entier dans un réseau de cellules de chaînes (avec une ligne par cellule), puis utilisez strmatch pour trouver la cellule qui contient la chaîne 'I_NEED_THIS_STRING', puis utilisez sscanf pour extraire les valeurs 3 à partir de cette cellule:

>> data = importdata('mostly_useless_text.txt','\n');  %# Load the data
>> index = strmatch('I_NEED_THIS_STRING',data);  %# Find the index of the cell
                                                 %#   containing the string
>> values = sscanf(data{index},'I_NEED_THIS_STRING = %f %f %f')  %# Read values

values =

  1.0e+003 *

    1.2345
    6.7890
    1.2345

Si le fichier a potentiellement beaucoup de texte inutile avant ou après la ligne qui vous intéresse, vous pouvez utiliser beaucoup de mémoire dans Matlab en chargeant tout dans une variable. Vous pouvez éviter cela en une ligne de chargement et l'analyse à la fois en utilisant une boucle et la fonction fgets :

fid = fopen('mostly_useless_text.txt','r');  %# Open the file
newLine = fgets(fid);                        %# Get the first line
while newLine ~= -1                          %# While EOF hasn't been reached
  if strmatch('I_NEED_THIS_STRING',newLine)  %# Test for a match
    values = sscanf(newLine,'I_NEED_THIS_STRING = %f %f %f');  %# Read values
    break                                    %# Exit the loop
  end
  newLine = fgets(fid);                      %# Get the next line
end
fclose(fid);                                 %# Close the file
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top