0

さて、分析のためにインポートしようとしている複数のファイルがあり、現在スクリプト内でこれを行うためにuiimport()を使用していますが、ファイルが毎回変更されるため、各ファイルのヘッダー行を手動でシフトする必要があります。私はこのようなことをしたいと思います:

DELIMITER = ',';
HEADERLINES = 50;  
data_imported = importdata(file_to_get, DELIMITER, HEADERLINES);

しかし、問題は、私の300〜ファイルのうちヘッダーライン数が50であるのは1つか2つだけであるということです。もう1つの非常に重要な注意点は、すべてのファイルのデフォルトのヘッダーライン数に2を追加するだけでよいということです。したがって、uiimport()を使用しているときのデフォルトのヘッダー行番号が50の場合、52に変更する必要があります。

おそらくifステートメントでこれを変更する方法はありますか?注:defaultheaderは、実際の変数ではなく、例として使用されています。

例えば:

if defaultheader = 30
     header = 32
end

.CSVファイルがExcelでどのように表示されるかの例

*Title
*
*Description (1.7)   Tue 03/20/12 09:59:09
*
* file name
*
* TestNames:
* _Test 1   (ein: 10)
* _Test 2   (ein: 15)
* _Test 3   (ein: 20)
* _Test 4   (ein: 25)
* _test 5   (ein: 30)
* _test 6   (ein: 35)
* _test 7   (ein: 40)
* _test 8   (ein: 45)
* _test 9   (ein: 50)
* _test 10   (ein: 55)
* _test 11   (ein: 60)
* _test 12   (ein: 65)
* _test 13   (ein: 70)
* _test 14  (ein: 75)
* _test 15   (ein: 80)
* _test 16   (ein: 85)
*
* Info1: ...
* Info2: ...
* info3: ...
* info4: ...
* info5: ...
* info6: ...
* info7: ...
* info8: ...
* info9: ...
* info10: ...
* info11: ...
* info12: ...
*
* Pixel,Tap Name,Tap Pixel,brightness
,,,10,15,20,25,30,35,40
,,,0,67,21,12,223,231,832
1,0A1,458,75,89,24,46,256,763,532
2,0A1,457,43,65,56,554,263,254,732
3,0A1,456,28,47,76,221,412,732,832
4,0A1,455,12,23,36,466,652,633,637
5,0A1,454,11,78,98,678,864,241,223
4

1 に答える 1

1

TEXTSCAN関数を使用して CSV ファイルを読み取り、文字CommentStyleで始まるすべてのヘッダー行を無視するオプションを指定できます*

以下のコードは、最初にファイルを行のセル配列として読み取り、 で始まるすべての行を無視し*ます。また、ヘッダー セクションの直後の最初の 2 行もスキップします。次に、各行をループし、タブ区切りの値を文字列として解析します。最初の 3 つの列を無視し、残りの値を数値に変換します。最後に、その行をマトリックスに格納しMます。このコードは、事前に列数を知っているとは想定せず、代わりにデータ行の 1 つから決定することに注意してください。

%# read lines
fid = fopen('file.csv','rt');
C = textscan(fid, '%s', ...
    'Delimiter','', 'Whitespace','\n', 'CommentStyle','*');
fclose(fid);
C = C{1}(3:end);    %# skip two lines

%# parse each line
numCols = sum(C{1}==',')+1 - 3;    %# number of columns
M = zeros(numel(C),numCols);
for i=1:numel(C)
    v = textscan(C{i}, '%s', 'Delimiter',',');
    v = str2double(v{1}(4:end));
    M(i,1:numel(v)) = v;
end

M関心のあるファイルの部分を含む結果のマトリックス:

M =
    75    89    24    46   256   763   532
    43    65    56   554   263   254   732
    28    47    76   221   412   732   832
    12    23    36   466   652   633   637
    11    78    98   678   864   241   223
于 2012-07-24T16:35:48.717 に答える