2

こんにちは、よろしくお願いします。これは私の最初の投稿です。これを別の方法で行う必要がある場合はお知らせください。

次のような行を含む大きなテキストファイルがあります。

"DATE      TIMESTAMP    T W M     T AL M C  A_B_C"

最初に、fopen および fget1 コマンドを使用してこれを読み取り、文字列を取得します。

Readout = DATE      TIMESTAMP    T W M     T AL M C A_B_C

これを textscan などで変換したい。私はmatlabを知っていると感じていますが、私はこのコマンドの専門家ではなく、使用に問題があります。

私は手に入れたい:

A = 'Date' 'TIMESTAMP' 'T W M' 'T AL M C' 'A_B_C'

ただし、次のコードを使用します。

 A = textscan(Readout,'%s');
 A = A{1}';

私は得る:

A = 'DATE'    'TIMESTAMP'    'T'    'W'    'M'    'T'    'AL'    'M'    'C'    'A_B_C'

タイトルで尋ねたように、単一のスペースを無視する方法はありますか?

PS:これを書いている最後に、あまりエレガントではない解決策を思いつきましたが、もっと良い解決策があるかどうかを知りたいです:

ReadBetter = [];
for n = 1:length(Read)-1
if Read(n) == ' ' & Read(n+1) ~= ' '
else
    ReadBetter = [ReadBetter Read(n)];
end
end
ReadBetter = [ReadBetter Read(n+1)];
Read   
ReadBetter

Output:
Read =

DATE      TIMESTAMP    T W M     T AL M C   A_B_C

ReadBetter =

DATE     TIMESTAMP   TWM    TALMC   A_B_C

これで、textscan で ReadBetter を使用できるようになりました。

この素晴らしいウェブページと、ここや他の多くの投稿で見つけたヘルプに感謝します

4

4 に答える 4

2

新しいバージョンのmatlabには、perlのsplitと同様の正規表現の「split」オプションがあります。

>> str = 'DATE      TIMESTAMP    T W M     T AL M C  A_B_C';
>> out = regexp(str, '  +', 'split')

out = 

    'DATE'    'TIMESTAMP'    'T W M'    'T AL M C'    'A_B_C'
于 2011-06-30T22:30:30.397 に答える
1

文字列を解析するためのより簡単な解決策は、関数REGEXPを使用して、行に2つ以上の空白文字があるインデックスを検索し、これらのインデックスを使用して、関数MAT2CELLを使用して文字列を文字列のセル配列に分割することです。関数STRTRIMを使用して、各サブストリングから先頭と末尾の空白を削除します。例えば:

>> str = 'DATE      TIMESTAMP    T W M     T AL M C  A_B_C';
>> cutPoints = regexp(str,'\s{2,}');
>> cellArr = mat2cell(str,1,diff([0 cutPoints numel(str)]));
>> cellArr = strtrim(cellArr)

cellArr = 

    'DATE'    'TIMESTAMP'    'T W M'    'T AL M C'    'A_B_C'
于 2011-06-30T15:26:25.660 に答える
0

あなたは物事を複雑にしすぎていると思います。使用するだけです:

fid = fopen('pathandnameoffile');
textscan(fid,'%s','Delimiter','\t');

上記の例では、区切り文字としてタブがあることを前提としています。必要に応じて別のものに変更してください。

于 2011-06-30T07:53:12.530 に答える
0

ファイルを読み取る 1 つの方法を次に示します。

ファイル.dat

DATE      TIMESTAMP    T W M     T AL M C  A_B_C
DATE      TIMESTAMP    T W M     T AL M C  A_B_C
DATE      TIMESTAMP    T W M     T AL M C  A_B_C
DATE      TIMESTAMP    T W M     T AL M C  A_B_C
DATE      TIMESTAMP    T W M     T AL M C  A_B_C
DATE      TIMESTAMP    T W M     T AL M C  A_B_C

MATLAB コード:

fid = fopen('file.dat', 'rt');
C = textscan(fid, '%s %s %c%c%c %c%2c%c%c %s');
fclose(fid);
C = [ C{1}, C{2}, ...
    cellstr( strcat(C{3},{' '},C{4},{' '},C{5}) ), ...
    cellstr( strcat(C{6},{' '},C{7},{' '},C{8},{' '},C{9}) ), ...
    C{10}
]

結果のセル配列:

C = 
    'DATE'    'TIMESTAMP'    'T W M'    'T AL M C'    'A_B_C'
    'DATE'    'TIMESTAMP'    'T W M'    'T AL M C'    'A_B_C'
    'DATE'    'TIMESTAMP'    'T W M'    'T AL M C'    'A_B_C'
    'DATE'    'TIMESTAMP'    'T W M'    'T AL M C'    'A_B_C'
    'DATE'    'TIMESTAMP'    'T W M'    'T AL M C'    'A_B_C'
    'DATE'    'TIMESTAMP'    'T W M'    'T AL M C'    'A_B_C'
于 2011-06-30T15:31:18.000 に答える