0

ほぼ150MBから500MBの大きなテキストファイルがあり、このファイルには20lac行が含まれています...

ファイルの内容は次のようになります。

USDINR12AUGFUT           1  1343791803  579782   2012-08-01 09:00:03  BID          55.5725       200
USDINR12AUGFUT           2  1343791803  594246   2012-08-01 09:00:03  BID          55.9650       150
USDINR12AUGFUT           3  1343791803  594570   2012-08-01 09:00:03  ASK          56.0700       100
USDINR12AUGFUT           4  1343791803  946831   2012-08-01 09:00:03  ASK          56.0450       500
USDINR12AUGFUT           5  1343791804   16514   2012-08-01 09:00:04  TRADE        55.9650         5  55965.00         5
USDINR12AUGFUT           6  1343791804   19401   2012-08-01 09:00:04  BID          55.9800        14
USDINR12AUGFUT           7  1343791804   32311   2012-08-01 09:00:04  BID          56.0000       100
USDINR12AUGFUT           8  1343791804   33292   2012-08-01 09:00:04  ASK          56.0400       150
USDINR12AUGFUT           9  1343791804   34695   2012-08-01 09:00:04  TRADE        56.0000         1  55970.83         6
USDINR12AUGFUT          10  1343791804   35599   2012-08-01 09:00:04  TRADE        56.0000         1  55975.00         7
USDINR12AUGFUT          11  1343791804   36626   2012-08-01 09:00:04  TRADE        56.0000         1  55978.12         8
USDINR12AUGFUT          12  1343791804   53676   2012-08-01 09:00:04  TRADE        56.0000        60  55997.43        68
USDINR12AUGFUT          13  1343791804   57434   2012-08-01 09:00:04  TRADE        56.0000        25  55998.12        93
USDINR12AUGFUT          14  1343791804   57967   2012-08-01 09:00:04  TRADE        56.0000         1  55998.14        94
USDINR12AUGFUT          15  1343791804   60474   2012-08-01 09:00:04  TRADE        56.0000         1  55998.16        95
USDINR12AUGFUT          16  1343791804   60988   2012-08-01 09:00:04  TRADE        56.0000         1  55998.18        96
USDINR12AUGFUT          17  1343791804   61232   2012-08-01 09:00:04  TRADE        56.0000         1  55998.20        97
USDINR12AUGFUT          18  1343791804   61974   2012-08-01 09:00:04  TRADE        56.0000         1  55998.21        98
USDINR12AUGFUT          19  1343791804   62449   2012-08-01 09:00:04  TRADE        56.0000         1  55998.23        99

私の質問は、このファイルを使用してMATLABでバックテストを実行したいので、このファイルをインポートする必要があります。しかし、私が使用fopenし、textscanMATLABがエラーをスローするときはいつでも...

??? Error using ==> textscan
Out of memory. Type HELP MEMORY for your options.

しかし、20〜50 MBのファイルを使用すると、正常に動作します。

これを克服する方法は?手伝ってください...


私のコード:

% file_path = 'E:\volume\august\AUG03.MCX';
file_path = 'D:\home\flexsys\pavan\usdinr_t\USDINR12AUGFUT.MCX';

fid = fopen(file_path);

C = textscan(fid,'%s %d %d %d %s %s %s %f %d %f %d');
n = length(C{1});

for i = 1 : n
    raw_data.symbol(i)      = C{1}(i);
    raw_data.trade_no(i)    = C{2}(i);
    raw_data.utc_sec(i)     = C{3}(i);
    raw_data.utc_nano(i)    = C{4}(i);
    raw_data.date(i)        = C{5}(i);
    raw_data.time(i)        = C{6}(i);
    raw_data.trade_type(i)  = C{7}(i);
    raw_data.ltp(i)         = C{8}(i);
    raw_data.ltq(i)         = C{9}(i);
    raw_data.vwap(i)        = C{10}(i);
    raw_data.volume(i)      = C{11}(i);

    % % % some back testing here.

end

すべてのデータをC変数に保存しましたが、エラーが発生します

4

3 に答える 3

1

ここでうまくいくかどうかわかりませんが、より高いレベルのコマンドを使用してデータを読み込んでみませんか?

あなたのデータ構造を考えると、私はcsvreadxlsreadまたはを調べますdlmread

また、現在のフォルダーにあるファイルを右クリックして、 をクリックすることimportもできます。

于 2013-02-08T12:25:43.807 に答える
0

メモリが不足すると、メモリの使用量を減らすために何かをする必要があります。ここにある他の回答にはいくつかの良いアイデアがありますが、それらが失敗した場合、残っているのは、メモリに収まるチャンクでファイルを読み取って処理することだけです。

1つのオプションは、指定した読み取り回数を指定textscanするパラメーターを使用して呼び出すことです。その呼び出しをループに入れると、毎回ファイルのチャンクが読み取られます。このようなもの:Nformat

while ~feof(fid)
    C = textscan(fid, 'format', N);
end
于 2013-02-08T15:33:45.383 に答える
0

で行数または繰り返しフォーマット数を指定するとtextscan、MATLAB は事前に必要な正確なメモリ量を計算します。

http://www.mathworks.co.uk/help/matlab/matlab_prog/strategies-for-effective-use-of-memory.html

于 2013-02-08T11:38:27.713 に答える