gpt4 book ai didi

MATLAB 文本文件更改两个字符串之间的多个条目(数字)

转载 作者:太空宇宙 更新时间:2023-11-03 20:28:07 24 4
gpt4 key购买 nike

我有几个 GPS 文件,我想将它们合并成一个文件。因此我需要更改一个条目,因为所有条目都再次从跟踪 #1 开始。

这是一个文本文件的例子:

Trace #1 at position 0.000000 $GPGGA,092105.95,4635.2492567,N,00823.5402932,E,1,13,0.8,2355.019,M,,,,*00

Trace #2 at position 1.000000 $GPLLQ,092106.10,042916,,,,,0,13,5.522,,*5D $GPGGA,092106.20,4635.2492568,N,00823.5402891,E,1,13,0.8,2355.020,M,,,,*00

Trace #1 at position 6.000000 $GPGGA,092106.70,4635.2492591,N,00823.5402862,E,1,13,0.8,2355.034,M,,,,*0A

Trace #2 at position 7.000000 $GPGGA,092106.70,4635.2492591,N,00823.5402862,E,1,13,0.8,2355.034,M,,,,*0A

Trace #3 at position 8.000000 $GPGGA,092106.70,4635.2492591,N,00823.5402862,E,1,13,0.8,2355.034,M,,,,*0A

我想要的输出应该将每个 Trace # 更改为增量(Trace #1Trace #5)。该位置不必更改,因为它不用于进一步处理。

我总共有大约 18000 条痕迹。

最佳答案

虽然原则上可以在合并所有文件时更正计数器,但我认为对于您的情况,在最终合并后使用一些后处理会更容易。即首先合并所有文件,然后更正最终文件。

以下是我的后处理解决方案。一句话:

  1. 将所有文本读入内存
  2. 搜索要更正的行
  3. 将这些行分成要保留的部分和要纠正的部分
  4. 对相关部分进行更正
  5. 将所有内容写入文件。

请注意 regexpstrfind 更慢且更难使用,但它允许您更灵活地设置格式。不同输出文件之间的意外前导空格、不同数量的空格等愚蠢的事情根本不会影响处理。此外,regexp 允许您在一次调用中完成第 2 步和第 3 步,这使得它比 strfind 更快更简单。

无论如何,这里是:

% Read the file into memory
fid = fopen('GPS_data.txt', 'r');
txt = textscan(fid, '%s', 'delimiter','\n');
txt = txt{1};
fclose(fid);

% Find relevant lines and separate into tokens
tok = regexp(txt, ...
'^(\s*Trace\s*#\s*)(\d*)(.*)$',...
'tokens');

% Do the replacements
matches = ~cellfun('isempty', tok);
txt(matches) = cellfun(@(x,y)[x{1}{1} int2str(y) x{1}{3}], ...
tok(matches),...
num2cell(1:nnz(matches))',...
'UniformOutput', false);

% Write results to file
fid = fopen('GPS_data_corrected.txt', 'w');
fprintf(fid, '%s\n', txt{:});
fclose(fid);

使用 arrayfun 或普通循环可以让您摆脱 num2cell,但是哦,好吧。

关于MATLAB 文本文件更改两个字符串之间的多个条目(数字),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36998477/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com