3

次のようにデータをテキストファイルとして保存しています。

1377303313.298551: 1377303312.800000, **40.497522, -74.434818, 0.026000,** PS  

1377303313.320448: R255 1

1377303313.369429: R255 1 

1377303313.419430: R255 1 

1377303313.468416: R255 1

1377303313.676656: 1377303313.200000, **40.497521, -74.434819, 0.010000** PS

1377303313.715420: R255 1  

1377303313.814361: R255 1

ファイルを次のようにしたい:

1 255 **40.497522  -74.434818   0.026000** 1377303313.320448

1 255 **40.497522  -74.434818  0.026000** 1377303313.369429

1 255 **40.497522  -74.434818   0.026000** 1377303313.419430

1 255 **40.497522  -74.434818   0.026000** 1377303313.468416

1 255 **40.497521  -74.434819   0.010000** 1377303313.715420

1 255 **40.497521  -74.434819   0.010000** 1377303313.814361

要するに、次の PS 測定に到達するまで、太字の部分を線に続けて、同じことを何度も繰り返す必要があります。私はこれに本当に苦労しています。助けていただければ幸いです。

前もって感謝します。

4

1 に答える 1

1

私はすぐにいくつかのスクリプトをまとめました。値の長さが行間で変わらないという意味で、入力ファイルは固定形式であると想定しました。これにより、「太字部分」など、行から必要なものを簡単に抽出できます。それらが修正されていない場合、抽出にはおそらく正規表現が必要になりますが、スクリプトの一般的な構造は変更されるべきではありません。

disp(' ');

fname = 'data.txt';

% desired output line format
desiredlineTemplate = '1 255 %s %s\n';


boldPart = '';

fid = fopen(fname);

% get first line
tline = fgets(fid);

if  numel(tline) > 36 
    % check if first line in a file is a PS line
    % based on its length.
    % lines with PS are much longer than the lines without PS
    % so we can use this information

    % extract the "bold part"
    boldPart = tline(39:end-4);

    % remove commas
    boldPart = strrep(boldPart,',','');
end

while ischar(tline)

    % disp(tline);

    if numel(tline) == 1,   
        % enmpty lines have length of 1. At least 
        % when I tried this. If this is not the case for your 
        % text file, u can ignor this bit.
        tline = fgets(fid); 
        continue;
    end


    % lines with PS are much longer than the lines without PS
    % so we can use this information
    if  numel(tline) > 36 
        % this is a line with PS
        % so extract "bold part"
        boldPart = tline(39:end-4);

        % remove comma
        boldPart = strrep(boldPart,',','');

    else
        % now we are in a line without PS. Thus need to reformat this line
        % and add "bold part" extracted earlier.

        % extract the first number in a line
        % again based on ints length
        firstNumber = tline(1:17);

        % CONSTRUCT THE DISIRED LINE OUTPUT
        desiredLine = sprintf(desiredlineTemplate, boldPart, firstNumber);

        disp(desiredLine);
    end

    tline = fgets(fid); 

end

fclose(fid); 

出力は次のとおりです。

>>  
1 255 40.497522 -74.434818 0.026000 1377303313.320448

1 255 40.497522 -74.434818 0.026000 1377303313.369429

1 255 40.497522 -74.434818 0.026000 1377303313.419430

1 255 40.497522 -74.434818 0.026000 1377303313.468416

1 255 40.497521 -74.434819 0.010000 1377303313.715420

1 255 40.497521 -74.434819 0.010000 1377303313.814361
于 2013-08-29T00:22:03.163 に答える