MATLAB:如何读取文本文件的每第N行?

发布于 2024-10-29 23:01:30 字数 493 浏览 6 评论 0原文

我有一些数据的格式如下:

dtau     E_av        variance    N_sims      Time
0.001   0.497951    0.000211625 25      Sun Apr  3 18:18:12 2011

dtau     E_av        variance    N_sims      Time
0.002   0.506784    0.000173414 25      Sun Apr  3 18:18:58 2011

现在我想使用 textscan 将每第三行的前 4 列(除了时间之外的任何列)读入 MATLAB;使用 fid = fopen('data.text') 后,我基本上必须循环这个:

results = textscan(fid, '%f %f %f %f', 1,'headerlines',1);

有什么想法吗? 干杯!

I have some data that's formatted as follows:

dtau     E_av        variance    N_sims      Time
0.001   0.497951    0.000211625 25      Sun Apr  3 18:18:12 2011

dtau     E_av        variance    N_sims      Time
0.002   0.506784    0.000173414 25      Sun Apr  3 18:18:58 2011

Now I want to read the first 4 columns (anything but the time) of every third line into MATLAB using textscan; after using fid = fopen('data.text'), I basically have to loop this:

results = textscan(fid, '%f %f %f %f', 1,'headerlines',1);

Any ideas?
Cheers!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

乖乖公主 2024-11-05 23:01:30
fid = fopen('data.text')
while ~feof(fid)
  results = textscan(fid, '%f %f %f %f', 1,'headerlines',1);
  //Processing...

  for i = 1:2
    fgets(fid)
  end
end

fgets 读取直到行尾,并返回该行的文本。因此,只需调用它两次即可跳过两行(丢弃函数的返回值)。

fid = fopen('data.text')
while ~feof(fid)
  results = textscan(fid, '%f %f %f %f', 1,'headerlines',1);
  //Processing...

  for i = 1:2
    fgets(fid)
  end
end

fgets reads until the end of a line, and returns the text on that line. So, just call it twice to skip two lines (discarding the return value of the function).

怼怹恏 2024-11-05 23:01:30

因为您知道您将有 5 个列标签(即字符串),后跟 4 个数值,后跟 5 个字符串(例如 'Sun''Apr'' 3''18:18:12''2011'),您实际上可以将所有数值数据读取到单个 N 字节中-4 矩阵,一次调用 TEXTSCAN

fid = fopen('data.text','r');                    %# Open the file
results = textscan(fid,[repmat(' %*s',1,5) ...   %# Read 5 strings, ignoring them
                        '%f %f %f %f' ...        %# Read 4 numeric values
                        repmat(' %*s',1,5)],...  %# Read 5 strings, ignoring them
                   'Whitespace',' \b\t\n\r',...  %# Add \n and \r as whitespace
                   'CollectOutput',true);        %# Collect numeric values
fclose(fid);                                     %# Close the file
results = results{1};                            %# Remove contents of cell array

Since you know you will have 5 column labels (i.e. strings) followed by 4 numeric values followed by 5 strings (e.g. 'Sun', 'Apr', '3', '18:18:12', and '2011'), you can actually read all of your numeric data into a single N-by-4 matrix with one call to TEXTSCAN:

fid = fopen('data.text','r');                    %# Open the file
results = textscan(fid,[repmat(' %*s',1,5) ...   %# Read 5 strings, ignoring them
                        '%f %f %f %f' ...        %# Read 4 numeric values
                        repmat(' %*s',1,5)],...  %# Read 5 strings, ignoring them
                   'Whitespace',' \b\t\n\r',...  %# Add \n and \r as whitespace
                   'CollectOutput',true);        %# Collect numeric values
fclose(fid);                                     %# Close the file
results = results{1};                            %# Remove contents of cell array
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文