Wie kann ich in einer Reihe von Zahlen mit „Textscan“ in MATLAB lesen, wenn die Datei hauptsächlich Text ist?

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

  •  26-09-2019
  •  | 
  •  

Frage

Ich habe eine Textdatei, die eine Reihe von 3 Zahlen hat, dass ich in MATLAB lesen muß.

Beispiel:

#######################
#
#
#    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

Ich brauche in diesen drei Zahlen in ein Array zu lesen.

Bitte helfen.

Danke

War es hilfreich?

Lösung

Wenn die meisten der Datei auf Ihre Anwendung irrelevant ist, schlage ich vor, eine Vorverarbeitung mit Ihrem Lieblings-Skriptsprache oder Kommandozeilen-Tool die entsprechenden Zeilen zu finden und verwenden textscan () auf dem.

z, aus einem Shell-Prompt:.

grep ^I_NEED_THIS_STRING infile > outfile

in Matlab:

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

Sehen Sie die textscan Dokumentation für weitere Details .

Andere Tipps

Eine Alternative ist IMPORT lesen Sie die gesamte Datei in eine Zelle Array von Strings (mit einer Zeile pro Zelle), dann verwenden Sie STRMATCH die Zelle zu finden, die die Zeichenfolge 'I_NEED_THIS_STRING' enthält, dann verwenden Sie sscanf die 3 Werte aus dieser Zelle zu extrahieren:

>> 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

Wenn die Datei möglicherweise viel von nutzlosem Text vor oder nach der Zeile, die Sie interessiert sind, dann können Sie eine Menge Speicher in MATLAB durch Laden sie alle in eine Variable aufbrauchen. Sie können dies durch das Laden vermeiden und eine Zeile zu einem Zeitpunkt Parsen einer Schleife und die Funktion 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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top