Question

I have data stored as a text file as follows :

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

I want my file to look like this:

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

In short, I need the bold parts to be carried on to the lines until they hit the next PS measurement, then repeat the same thing on and on. I'm really struggling with this, I'd appreciate some help!

Thanks in advance.

Était-ce utile?

La solution

I quickly put together some script. I assumed that your input file has a fixed format, in a sense that the lengths of values do not change between lines. This makes easier to extract the things u need from the lines, such as the 'bold parts'. If they r not fixed, regular expressions probably would be a needed for extractions, but the general structure of the script should not change.

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); 

The output is:

>>  
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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top