2

私はこのようなtxtファイルを持っています

a e e a a i
i i a e u i i a
a i e i i i a i 

そして、各行を個別のベクトルに入れたいです(もちろん、すべての文字を1つのフィールドに入れます)。線の長さが違います。数値コンテンツでは簡単そうです。しかし、文字の行でこれを行うにはどうすればよいですか?

私が現在選択している方法は、文字を数値に変換し、仕事に dlmread を使用することです。より良いアイデアはありますか?

ありがとう。

編集:自分だけで解決策を見つけました。しかし、ここでの反応はもっと単純に見えます。

fname =(['vokale/',si,'.txt']);  
         disp (['loading ...',fname]);
            fid = fopen(fname);           
            [vowels] = textread(fname, '%c');

s = textscan(fid,'%s','Delimiter','\n');
s = s{1};
b1_cell=textscan(s{1,1}, '%s');
b1=b1_cell{1,1};
b2_cell=textscan(s{2,1}, '%s');
b2=b2_cell{1,1};
b3_cell=textscan(s{3,1}, '%s');
b3=b3_cell{1,1};
b4_cell=textscan(s{4,1}, '%s');
b4=b4_cell{1,1};
b5_cell=textscan(s{5,1}, '%s');
b5=b5_cell{1,1};
4

1 に答える 1

0

最初に、以下を使用して cell 配列の行を取得しtextreadます。

C = textread(filename, '%s', 'delimiter', '\n')

regexp次に、各行を文字に分割するために使用できます。

result = cellfun(@(x)regexp(x, '\w+', 'match'), C, 'Uniform', false)

結果は、文字のセル配列のセル配列になります。

result = 
    {'a'    'e'    'e'    'a'    'a'    'i'}
    {'i'    'i'    'a'    'e'    'u'    'i'    'i'    'a'}
    {'a'    'i'    'e'    'i'    'i'    'i'    'a'    'i'}

または、スペースで区切られた文字のみ (つまり、1 文字のみ) を処理する場合は、各行を文字列 (C の文字の配列に相当) として格納できます。これを行うには、スペースを削除するだけです。たとえば、次を使用しますregexprep

result = cellfun(@(x)regexprep(x, ' ', ''), C, 'Uniform', false)
result = 
    'aeeaai'
    'iiaeuiia'
    'aieiiiai'

たとえばe、2 行目の にアクセスするには、 と記述できますresult{2}(4)

于 2013-01-14T16:39:04.900 に答える