ASCIIファイルからmatlab変数にテキスト値を読み込む
-
06-07-2019 - |
質問
次のファイルを検討してください
var1 var2 variable3
1 2 3
11 22 33
数値をマトリックスにロードし、列タイトルを変数にロードしたい:
variable_names = char('var1', 'var2', 'variable3');
名前と数字を2つのファイルに分割することは構いませんが、matlabコードファイルを準備して評価することは選択肢ではありません。
任意の数の変数(列)が存在する可能性があることに注意してください
解決
次のような操作には importdata をお勧めします。
d = importdata('filename.txt');
戻り値は、「data」という名前のメンバーに数値フィールドがあり、「colheaders」という名前のフィールドに列ヘッダーがある構造体です。
これらのような操作データをインポートするためのもう1つの便利なインターフェイスは、Statistics Toolboxで利用可能な「dataset」クラスです。
他のヒント
ヘッダーが最初の行にある場合
A = dlmread(filename,delimString,2,1);
数値データをマトリックスAに読み込みます。
その後、使用できます
fid = fopen(filename)
headerString = fscanf(fid,'%s/n') % reads header data into a string
fclose(fid)
その後、 strtok を使用してheaderStringをセル配列に分割できます。不明な数の列を処理することを考えることができるアプローチの1つです
編集fscanf関数呼び出しの修正
異なる形式指定子でtextscanを使用するだけです。
fid = fopen(filename,'r');
heading = textscan(fid,'%s %s %s',1);
fgetl(fid); %advance the file pointer one line
data = textscan(fid,'%n %n %n');%read the rest of the data
fclose(fid);
この場合、「heading」は、各列の見出しが内部にあるセルを含むセル配列になります。したがって、それらを文字列のセル配列または必要なものに変更する必要があります。 「データ」は、読み取る列ごとに数値配列を含むセル配列になるため、それらを連結して1つの行列を作成する必要があります。
所属していません StackOverflow