-1

'Month'数値やその他の情報を含むテキスト ファイル内の文字列を検索したい

*私の名前はディーです

*月

2 3 4

3 6 8

4 87 9

*日

1、4、67、

2、6、98、

3、55、89、

4、12、34、

*ダス

*gfsd

*gdfd

*sdasd

*ファイルの終わり

それらの数値の配列を作成します。次に、次の文字列 を検索し'Day'、対応する番号の配列を作成します。

現時点では、すべての文字を 2 回検索して数字を見つけるループを実行しています。これにより、プログラムが非常に遅くなります。誰でもそれを行うためのより速い方法を提案できますか?

strToSearchFor = 'Month'; 
lengthStrToSearchFor = length(strToSearchFor); 
MonthArrayFlag =0;

for i=1:lengthAllFileChars
    fseek(fid9,i-1, 'bof');                                     
    tline = fscanf(fid9,'%c',lengthStrToSearchFor);
    if (strcmp(strToSearchFor,tline)==1)
        'FOUND IT';
        tline;
        for a = 1:lengthAllFileChars                        
            MonthNumber = fscanf(fid9, '%f,')';     
            if MonthArrayFlag == 0;
                MonthArray = zeros(1,4);                     
                MonthArray(1,:) =  nodeCoordinates;
                MonthArrayFlag = 1;
            else
                MonthArray = vertcat(MonthArray,MonthNumber);
            end
        end         
    end
end

このコードは、 に対して繰り返され'DAY'ます。

4

2 に答える 2

0

関数「textscan」をチェックアウトしましたか?おそらく、テキストファイルを 1 行ずつ読み取り (textscan(fid, '%s'))、キーワード MONTH または DAY をチェックできます。関数 "str2num" によって文字列を行列に変換します。コードについて助けが必要な場合は、大まかなコードを提供できるかもしれませんが、いつになるかはわかりません. ファイルにアクセスする関数をあまり使用しないほど、プログラムの実行速度は速くなります。そこで、すべてを読み取り、それを 1 つまたは複数のセル配列に配置する textscan の出番です。

于 2013-06-27T04:25:17.753 に答える
0

他のポスターで提案されているとおりに textscan を使用すると、スペースを含むすべてのセルが独自のセルに分割されたセル配列が返されます (すべきですか?)。

各セルなどを通過する代わりに、代わりに次のようにします。

monthInd=find(strcmp('Month',yourNewCellArray)) 
%Keep in mind this IS case sensitive

dayInd= same thing ^^^ for day

endOfDayInd = same thing, 
%hopefully you have some way of knowing when numbers stop? 

次に、次のことができます。

monthVals=cell2mat(yourNewCellArray(monthInd+1:dayInd-1)) 
%pretty sure its () in this case rather than {}

これと他のポスターの方法に対する唯一の注意点は、値が3x3マトリックスではなくベクトルになったことです。マトリックスでそれらを必要としない場合、またはベクトルをマトリックスの形に変更できる場合は、問題ありません。

そうでない場合でも、すべての希望が失われるわけではありません。textscan の '%s' を char(10) に置き換えます。これは改行文字です。理想的には、月と日のインデックスを見つけるためにコードを変更する必要はありませんが、その間にある数値の各行が独自の個別の文字列になります。

これにはおそらく微調整が必​​要で、可能であればアプリオリな知識が少し必要ですが、少なくともいくつかのアイデアが得られるはずです:)

于 2013-06-27T05:41:27.467 に答える