MATLAB下pdf文件操作读取示例

摘要

当遇到一些需要大量数据的项目,数据的读取与储存显得尤为重要。怎样把数据从其他格式的文件中读取,并运用到程序中是很多时候我们要解决的问题。对于平常的.txt,和.xlsx文件,MATLAB有对应的函数帮助读取,但是遇到pdf文件时MATLAB很难读取内容。本文以一个操作实例提供了一个从pdf文件中读取数据的方法。

原文件

在本文中pdf原文件部分页面如下:
在这里插入图片描述
在这里插入图片描述
这里的任务是读取目录中的部件名称,其对应的页面,以及某一页中零件的名称,其对应的件号。

预处理为txt

直接读取pdf对MATLAB来说颇为困难,所以我们将pdf手工转为有规律的txt文件。如下图所示:
在这里插入图片描述
可以看到我们都是以一行一行的方式列出信息,这有助于matlab中txt操作函数的执行。
还有个小细节就是每隔一定的内容就会以“!”为分界,这有助于MATLAB识别到某一部分已经读完,可以换行了。

代码实现

代码如下:
目录读取函数

function partnp=fun_getnamepagenum(filename)
fid = fopen(filename,'rt');%read text, 'rt'


n= 0; s(find(isspace(s))) = [] %去除所有空格
m=0;
while ~feof(fid)  % file operation, end of file
    str = fgetl(fid);
     str(isspace(str)) = []; %去除所有空格
    if isempty(str)
        break
    end
    if  str(1)=='!'
        m=m+1;
        n=0;
    continue    
    end
    t=find(str=='.');%
    if isempty(t)
        break
    end
    if ~isempty(strfind(str,'0.2'))
         partnp{2*m,n+1}=str(1:t(2)-1);
    else
         partnp{2*m,n+1}=str(1:t(1)-1);
    end
   
   
    if str(end-1)=='-'
        partnp{2*m-1,n+1}=str2num(str(end));
    else
        partnp{2*m-1,n+1}=str2num(str(end-1:end));     
    end
    n=n+1;
end

fclose(fid);

页面读取函数:

function  cpfind= fun_getnameidx( filename )
fid = fopen(filename,'rt');%read text, 'rt'
n= 0;%文件行数,
m=0;%第几个小零件
while ~feof(fid)  % file operation, end of file
    str = fgetl(fid);%读取行 
    if isempty(str)
        break       
    end
    if str(1)=='!'
        if n~=0
            for i=1:0.5*n
         cpfind{m-2,i}= cpfind{m-2,0.5*n+i};
         cpfind{m-2,0.5*n+i}=[];
            end
        end
         if length(str)==1;
            break
        end
        if length(str)==2
        m=str2num(str(2));
        else
        m=str2num(str(2:3));
        end
        n=0;        
    end
    
  if str(1)~='!'
       str(isspace(str)) = []; %去除所有空格
       t=find(str=='.');
   if isempty(t)
        cpfind{m-1,n+1}=str;
   elseif t(1)==2&&(str(1)=='0'||str(1)=='1')
        cpfind{m-2,n+1}=str(1:t(2)-1);
   elseif t(1)==1&&str(2)=='0'
        cpfind{m-2,n+1}=str(2:t(3)-1);
     elseif t(1)==1&&t(2)>2
        cpfind{m-2,n+1}=str(2:t(2)-1);        
      elseif t(1)==1&&t(2)==2&&t(3)>3
        cpfind{m-2,n+1}=str(3:t(3)-1);    
    elseif t(1)==1&&t(2)==2&&t(3)==3
        cpfind{m-2,n+1}=str(4:t(4)-1);  
         elseif t(1)==1&&t(2)==2&&t(3)==3&&t(4)==4
        cpfind{m-2,n+1}=str(5:t(5)-1);  
   else     
       cpfind{m-2,n+1}=str(1:t(1)-1);
   end

    n=n+1;
 end
end


fclose(fid);
end

使用时只用在脚本文件中输入填入文件名的函数即可。
结果如下:
在这里插入图片描述

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值