1. 程式人生 > >讀取檔案(.txt、.excel、.csv),在c++、matlab環境中

讀取檔案(.txt、.excel、.csv),在c++、matlab環境中

1.開始時準備在vsat010下通過C++讀取Excel,需要 ole等 但方法總是配置不好。

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下處理,結果非常好的,得到了解決以下是我的程式碼,可以選擇匯入我提供的檔案

扣完圖片儲存在matlab工作目錄下

clc
clear
%%%%%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);
figure
imshow(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 066
directory=[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