读取文件(.txt、.excel、.csv),在c++、matlab环境中

来源:互联网 发布:excel表找相同数据 编辑:程序博客网 时间:2024/05/10 08:06

1.开始时准备在vsat010下通过C++读取Excel,需要 ole等 但方法总是配置不好。

感兴趣的可以参考http://www.cnblogs.com/kernel0815/p/3318182.html


2.最后做项目发现,对于excel文件其实最好的处理方式是:用读取.csv,

因为它们可以互相转化只是在csv文件中每个量直接由逗号隔开,也可以直接读.。

在此代码栗子分享

待处理文件 data.csv如下:

#image/照片ID,time/时间,latitude/纬度,longitude/经度,altitude/高程,roll/滚转觿,pitch/俯仰觿,yaw/航向觿
1,2016/11/30 11:31,34.37583,112.83631,746.12,0.5,0.1,81.3
2,2016/11/30 11:31,34.37582,112.83741,744.66,-0.1,3.1,79.5
3,2016/11/30 11:31,34.37581,112.83848,743.45,0.5,7,80.3
4,2016/11/30 11:31,34.37581,112.83955,744.45,-0.7,6.7,80.8

实现代码

//// ReadCsv.cpp : 定义控制台应用程序的入口点。#include "stdafx.h"#include <opencv\highgui.h> #include <iostream>#include <string>#include <fstream>#include <opencv2/highgui/highgui.hpp>#define ExampleNum 114  //.csv文件中样本数据行数using namespace std;using namespace cv;int main(){ifstream file("data.csv");string data[ExampleNum+1][8];string value;int row = 0;while (getline(file,value)) {  //istream& getline (istream&& is, string& str);//读取的istream是作为参数is传进函数的。读取的字符串保存在string类型的str中。istringstream sin(value);  //istringstream::istringstream(string str);它的作用是从string对象str中读取字符。string field;int col = 0;while (getline(sin, field, ',')) {data[row][col] = field;col = col + 1;}cout << data[row][0] << "\t" << data[row][1] << "\t" << data[row][2] <<"\t"<< data[row][3] <<"\t"<<data[row][4] << "\t" << data[row][5] <<"\t" << data[row][6] << "\t" << data[row][7] <<"\t"<<endl;row = row + 1;}waitKey(0);    return 0;}

3.之后有个将Excel转换成转成 .txt 读取的想法通过c++读取,也可以走得通,可参考点击打开链接

最后我自己写了一些代码可以参考,举个例子说明,这里有待处理文件.txt

xiaoming;123456;shanghai
zhangming;123;shangdong
hanmeimei;987;beijing

处理代码

#include<iostream>#include<stdio.h>#include<string>using namespace std;int main(int argc,char **argv){    string strname,strid,straddress;    char buff[256];    FILE *p;    p=fopen("data.txt","r");    while(fgets(buff,256,p)!=NULL)    {        strname=strtok(buff,";");//这里要注意的是一行文本中在第一次使用strtok的时候,第一个参数要使用待处理数据的首地址        strid=strtok(NULL,";");//但是在该行的以后使用中第一个参数就要用NULL,这一点很重要,往往被人忽视        straddress=strtok(NULL,"\n");//更加要注意的一点是,在分割该行最后一个属性的时候,很多人对于分隔符的选取仍然是" "(空格),这样是不正确的,应该使用"\n"来分割,因为最后的符号是"\n"而不是空格,如果继续使用空格作为分隔符的话,那么最后一个属性就多了一个"\n"了。        cout<<strname<<" "<<strid<<" "<<straddress<<endl;    }    return 0;}

strtok() 函数可以对各种分隔符进行分隔变量//本例中是对;

4.最后考虑图片的读取最好在matlab下处理,结果非常好的,得到了解决以下是我的代码,可以选择导入我提供的文件

文件链接百度云盘:链接:链接: http://pan.baidu.com/s/1skhNX3f     密码:fj75

扣完图片保存在matlab工作目录下

clcclear%%%%%5  %%调用格式:%{截图函数I2=imcrop(I,RECT);X2=imcrop(X,MAP,RECT);RGB2=imcrop(RGB,RECT);其中,I、X、RGB分别对应灰度图像、索引图像、RGB图像的数据矩阵,MAP为索引图像颜色表,I2、X2、RGB2分别为各自输入矩阵所对应的输出矩阵。而RECT为可选参数,格式为[XMIN YMIN WIGTH HEIGHT].例如[20 20 40 40],则剪裁后的图像的左上角像素为原图像位置在(20,20)的像素,而剪裁后图像的右下角像素为原图像位置在(60,60)的像素。另外,如不加参数RECT,将使用鼠标在原图像上划矩形框的方法来实现图像的剪裁,所划矩形框内的图像将在新窗口中输出。如:RGB=imread('1,jpg');RGB1=imcrop(RGB,[60,255,400,425]);imhsow(RGB);figureimshow(RGB1);%}%开始通过弹出文件选择框选择excel文件,读入数据,如读入我提供的文件005%弹出选择excel文件窗,选择文件[filename, pathname] = uigetfile({'*.xls;*.xlsx;', 'EXCEL 文件 (*.xls, *.xlsx)'},'导入文件');str = [pathname,filename];data = xlsread(str);[num ,ixi, raw]=xlsread(str);num[num_x,num_y]=size(num)list=dir([pathname,'*.jpg']);k=length(list)for j=1:k    %str_img= strcat (pathname, int2str(i) , '.jpg') ; % 连接字符串形成图像的文件名    str_img= strcat (pathname, list(j).name)    a{j}=imread(str_img);    %img=imread([pathname,'001.jpg']);end%在当前work directory下建立image文件夹% //如果文件夹已存在,会提示warning,运行无碍          mkdir 066directory=[cd,'/066/'];%扣取指定位置的区域图片switch (num(1,2))    case 1        for i=1:k            img1=imcrop(a{i},[num(i,6),num(i,7),num(i,8),num(i,9)]);            imwrite(img1,[directory,num2str(i),'11.jpg'])        end            case 2        for i=1:k            img1=imcrop(a{i},[num(i,6),num(i,7),num(i,8),num(i,9)]);            imwrite(img1,[directory,num2str(i),'11.jpg'])            img2=imcrop(a{i},[num(i,13),num(i,14),num(i,15),num(i,16)]);            imwrite(img2,[directory,num2str(i),'12.jpg'])        end    case 3        for i=1:k            img1=imcrop(a{i},[num(i,6),num(i,7),num(i,8),num(i,9)]);            imwrite(img1,[directory,num2str(i),'11.jpg'])            img2=imcrop(a{i},[num(i,13),num(i,14),num(i,15),num(i,16)]);            imwrite(img2,[directory,num2str(i),'12.jpg'])            img3=imcrop(a{i},[num(i,20),num(i,21),num(i,22),num(i,23)]);            imwrite(img3,[directory,num2str(i),'13.jpg'])        end    case 4        for i=1:k            img1=imcrop(a{i},[num(i,6),num(i,7),num(i,8),num(i,9)]);            imwrite(img1,[directory,num2str(i),'11.jpg'])            img2=imcrop(a{i},[num(i,13),num(i,14),num(i,15),num(i,16)]);            imwrite(img2,[directory,num2str(i),'12.jpg'])            img3=imcrop(a{i},[num(i,20),num(i,21),num(i,22),num(i,23)]);            imwrite(img3,[directory,num2str(i),'13.jpg'])            img4=imcrop(a{i},[num(i,27),num(i,28),num(i,29),num(i,30)]);            imwrite(img4,[directory,num2str(i),'14.jpg']);        end    case 5        for i=1:k            img1=imcrop(a{i},[num(i,6),num(i,7),num(i,8),num(i,9)]);            imwrite(img1,[directory,num2str(i),'11.jpg'])            img2=imcrop(a{i},[num(i,13),num(i,14),num(i,15),num(i,16)]);            imwrite(img2,[directory,num2str(i),'12.jpg'])            img3=imcrop(a{i},[num(i,20),num(i,21),num(i,22),num(i,23)]);            imwrite(img3,[directory,num2str(i),'13.jpg'])            img4=imcrop(a{i},[num(i,27),num(i,28),num(i,29),num(i,30)]);            imwrite(img4,[directory,num2str(i),'14.jpg']);            img5=imcrop(a{i},[num(i,34),num(i,35),num(i,36),num(i,37)]);            imwrite(img5,[directory,num2str(i),'15.jpg'])        end    case 6        for i=1:k            img1=imcrop(a{i},[num(i,6),num(i,7),num(i,8),num(i,9)]);            imwrite(img1,[directory,num2str(i),'11.jpg'])            img2=imcrop(a{i},[num(i,13),num(i,14),num(i,15),num(i,16)]);            imwrite(img2,[directory,num2str(i),'12.jpg'])            img3=imcrop(a{i},[num(i,20),num(i,21),num(i,22),num(i,23)]);            imwrite(img3,[directory,num2str(i),'13.jpg'])            img4=imcrop(a{i},[num(i,27),num(i,28),num(i,29),num(i,30)]);            imwrite(img4,[directory,num2str(i),'14.jpg']);            img5=imcrop(a{i},[num(i,34),num(i,35),num(i,36),num(i,37)]);            imwrite(img5,[directory,num2str(i),'15.jpg'])            img6=imcrop(a{i},[num(i,41),num(i,42),num(i,43),num(i,44)]);            imwrite(img6,[directory,num2str(i),'16.jpg']);        end    case 7        for i=1:k            img1=imcrop(a{i},[num(i,6),num(i,7),num(i,8),num(i,9)]);            imwrite(img1,[directory,num2str(i),'11.jpg'])            img2=imcrop(a{i},[num(i,13),num(i,14),num(i,15),num(i,16)]);            imwrite(img2,[directory,num2str(i),'12.jpg'])            img3=imcrop(a{i},[num(i,20),num(i,21),num(i,22),num(i,23)]);            imwrite(img3,[directory,num2str(i),'13.jpg'])            img4=imcrop(a{i},[num(i,27),num(i,28),num(i,29),num(i,30)]);            imwrite(img4,[directory,num2str(i),'14.jpg']);            img5=imcrop(a{i},[num(i,34),num(i,35),num(i,36),num(i,37)]);            imwrite(img5,[directory,num2str(i),'15.jpg'])            img6=imcrop(a{i},[num(i,41),num(i,42),num(i,43),num(i,44)]);            imwrite(img6,[directory,num2str(i),'16.jpg']);            img7=imcrop(a{i},[num(i,48),num(i,49),num(i,50),num(i,51)]);            imwrite(img7,[directory,num2str(i),'17.jpg']);        end        end



3 0
原创粉丝点击