一、matlab導入並處理xml文件數據
xmlDoc = xmlread('position_sen2_mod1.xml'); %position_sen2_mod1.xml為刪除了network.dtd這一行的文件 NodeArray = xmlDoc.getElementsByTagName('node'); %將所有node節點放入數組NodeArray X_all_pos=zeros(1,NodeArray.getLength-1); %X_all_pos存儲全部節點的x坐標;一共13個有意義的節點,最后一個節點不計入,所以有getLength-1 Y_all_pos=zeros(1,NodeArray.getLength-1); %Y_all_pos存儲全部節點的y坐標; NodeID_array=cell(1,NodeArray.getLength-1); %循環讀取節點坐標位置 for i = 0 : NodeArray.getLength-1 %只取前13個有意義的節點(連/排/班),最后一個節點無意義。循環次數根據要提取的內容做適當修改 countAttr=0; %countAttr作為想要搜尋的節點屬性的index;
%NodeArray.item(0)對應第i個節點的xml代碼部分:<node name="p-1" model="HopRadioNode" mobility="mobile" ignore_questions="true" min_match_score="strict matching">
%.item(i)對xml代碼的每行的多個屬性值進行索引; thisItem = NodeArray.item(i); %NodeArray.item(i)對第i個<node name...>進行索引;將該節點(及其子節點)賦值給ThisItem %提取節點的編號,移動節點:item(0),"true"//item(1):'strict matching'//item(2):'mobile'//item(3):'HopRadioNode'//item(4):'p-1~3','b-1~9' %提取節點的編號,固定節點:item(0),"true"//item(1):'strict matching'//item(2):'HopRadioNode'//item(3):'L' if i~=3 %除了連節點3為固定節點,其余節點均為移動節點 NodeID = char(thisItem.getAttributes.item(4).getValue); %p排節點和b班節點為移動節點,ID屬性所在位置為item(4),item()根據想要提取的屬性值做適當修改 NodeID_array{i+1}=NodeID; %NodeID_array()存儲每一個節點的ID信息 else NodeID = char(thisItem.getAttributes.item(3).getValue); %L連節點為固定節點,ID屬性所在位置為item(3) NodeID_array{i+1}=NodeID; %%NodeID_array()存儲每一個節點的ID信息 end childNode = thisItem.getFirstChild ; %獲取<node name...>的第一個屬性子節點:<attr name...> while ~isempty(childNode) %遍歷node的所有子節點,也就是遍歷所有attr節點,當屬性子節點非空時,進入while循環 if childNode.getNodeType == childNode.ELEMENT_NODE ; %檢查當前節點沒有子節點?【若為0,則跳出if,轉入下個childNode節點;若為1,則讀取屬性子節點】? %childNodeNm = char(childNode.getTagName); %獲取當前節點的名字:attr %childNodeData = char(childNode.getFirstChild.getData) %獲取第一個attr節點的數據 childAttributes = char(childNode.getAttributes.item(1).getValue); %得到第一個節點的屬性名稱thisItem.getFirstchild.getAttributes.item(i);得到屬性值 .getvalue x=str2double(childAttributes); %將字符串類型數據轉化為double型數據 countAttr=countAttr+1; %由於要提取的第二個屬性值y_position在第二個<attr name...>中,所以countAttr+1;根據所要提取的內容可進行適當修改 if (mod(countAttr,32)==1) %每一個<node name...>一共有32個<attr name...>; 只需要提取出每個node的第一個屬性<attr name='x_position'...>,即x坐標位置,所以用求余函數mod進行條件判斷 x_pos=x; %將x存進x_pos; x_pos每次循環都會變,主要為了檢查;也可以直接注釋掉,令X_all_pos(i+1)=x; X_all_pos(i+1)=x_pos; elseif (mod(countAttr,32)==2) %只需要提取出每個node的第二個屬性<attr name='y_position'...>,即x坐標位置,所以用求余函數mod進行條件判斷 y_pos=x; %同上 Y_all_pos(i+1)=y_pos; end end % End IF childNode = childNode.getNextSibling; % 切換到下一個有效節點 %ChildNodeAttributes = char(thisItem.getAttributes.item(j).getValue) end % END WHILE end % END FOR end % END FUNCTION
二、matlab導入txt 文件數據
%導入txt文件的幾種形式
%如果txt文件中均為double類型的數組,下面三種方法均可以用
data1=textread('data.txt') %可選擇性讀取:詳見:http://blog.sina.com.cn/s/blog_9e67285801010bju.html
data2=load('data.txt') %只能讀取數字
data3=importdata('data.txt') %可以讀取字符串和數字
%如果txt文件中有字符串型數據存在;可以用第三種方法,將數據存儲為結構體數據
ban1_sen1_txt3=importdata('班2信息2.txt');
三、matlab導入.xls;.xlsx 文件數據
%導入班節點數據 [num_2ban1,~,raw_2ban1]=xlsread('sen2ban1.xlsx'); %num_2ban1只返回數值數據 ,raw_2ban1返回包括字符串的數據 [num_2ban2,~,raw_2ban2]=xlsread('sen2ban2.xlsx'); [num_2ban3,~,raw_2ban3]=xlsread('sen2ban3.xlsx');
一個xls文件中讀取多個Sheet:
[Type Sheet Format]=xlsfinfo('現狀OD數據及其他數據.xls'); OD=xlsread('現狀OD數據及其他數據.xls',Sheet{1}); Area=xlsread('現狀OD數據及其他數據.xls',Sheet{2});
四、matlab導入.csv文件
fid = fopen('D:\can2020-04-02(all12-56).csv','r');
csvdata = textscan(fid, '%f %d %d %d %d %d %d %s %s %s %s %s %s %s %s','delimiter', ',');
%fid>0表示打開成功,f浮點型,d整數型,s字符串型(實現數據以不同形式導入matlab中)
%讀取數據 返回為cell類型
fclose(fid);
%將數據存儲在csvdata中,並保存為cell形式
五、matlab批量導入csv文件(也可以將循環中的csv文件替換成其他類型的文件)
%導入數據方式參考:https://blog.csdn.net/zzx2016zzx/article/details/86696313
clc,clear;
s=what;
p=s.path; %當前文件夾路徑
filename=dir([p,'\','*.csv']); %拼接路徑,讀入全部的csv文件的文件名
mydata=cell(1,length(filename));%創建初始文件元胞數組, length(filename)為文件個數
for i=1:length(filename)
% mydata{i}=xlsread(filename(i).name); %導入xls數據:只適用於數值型數據
fid = fopen(filename(i).name,'r');
csvdata(i,:)= textscan(fid, '%f %d %d %d %d %d %d %s %s %s %s %s %s %s %s','delimiter', ','); %%fid>0表示打開成功,f浮點型,d整數型,s字符串型(實現數據以不同形式導入matlab中)
%讀取數據 返回為cell類型 length(filename)x15 cell,共15列數字
fclose(fid);
end
六、數據類型轉換命令
1、cell2mat:將cell轉換為mat的char型 %整個cell需要為同種類型 2、str2num:將mat從char轉換為double型 3、cellstr:將char轉cell 4、num2str:將double轉char 5、num2cell:將double直接轉cell
參考資料:
1.https://blog.csdn.net/zzx2016zzx/article/details/86696313 作者:豬豬俠喜歡躲貓貓
2.https://blog.csdn.net/zllljf/article/details/78881081?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight, 作者:需要多喝水的魚
