g981222_ 2023-03-30 17:35 采纳率: 100%
浏览 39
已结题

如何用matlab批量读取txt文件中某一行的值并保存成excle

有50个txt文件,只读取每个txt文件的第10行,然后生成50行的excle表格,txt文件大概就是下面这张图,这个好像还用到sort_nat自然排序的函数,希望能得到高人的编程指点!多谢

img

img

  • 写回答

2条回答 默认 最新

  • 水岂常形 2023-04-06 15:09
    关注

    类似这种任务可以拆分成这么几个步骤
    (1)循环获取文件夹内的txt文件名称——使用dir函数
    (2)读txt文件时,把第50行提出来,存进矩阵——使用textscan函数
    (3)把矩阵转成excel——使用xlswrite函数

    对于提取txt可以看一下我的文章
    https://blog.csdn.net/weixin_44276743/article/details/127026036?spm=1001.2014.3001.5502
    https://blog.csdn.net/weixin_44276743/article/details/127269690?spm=1001.2014.3001.5502
    里面提到的一些内容

    %首先你要把所有txt放在一个文件夹里,这个文件夹里只有这些txt,就比较好办
    %代码中你需要替换或修改的变量有:path,Format,filename
    
    info=dir((fullfile(path, '\*.txt'))); %获取需要更改的文件们的信息,只选txt格式的,path替换成你自己放txt的文件夹地址
    len=length(info);  %计数一共几个文件
    for i=1:len  %准备循环访问这些文件
      name=info(i).name; %获取第i个文件的名字 (*.txt这样的带后缀的全名)
      fpathname=[path '\' name]; %获取带地址的全名
      fn= fopen(fpathname);%打开这个文件
      Format=repmat('%f %f %f %f %f %f' ,1,1);  %这里你一行有多少个数,就写多少个%f
      data = textscan(fn,Format,1,'headerlines',49);  
             %参数1:从fn里
             %参数2:以Format的格式提取值(比如现在写的代码就是6个float格式,即六个%f
             %参数3:提取1行
             %参数4:跳过前n行
             %参数5:跳过的n为49,即提取第50行
        fclose(fn); %记得有开有关,不然下次会报错
        mdata=cell2mat(data); %用textscan提取出的内容应该是一个cell格式的,转成行向量格式,这样方便储存
    Alldata(i,:)=madata; %创建一个变量Alldata储存每个文件第50行的内容
    end
    %循环结束,你想要的数据应该已经在Alldata里了
    
    %写入xls
    xlswrite(filename,Alldata); %filename是你自己创建的想存这个数据的带路径的文件名,大概是’XXX\YY.xls'这种格式。
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月20日
  • 已采纳回答 4月12日
  • 创建了问题 3月30日