我有一個excel列,包含4或5個字符的字符串,我想將它們轉換爲數字。因此,不要「關閉」,我希望單元格包含「5」。而不是一個「打開」我想要的細胞含有「4」如何將存儲在單元格數組中的字符串轉換爲Matlab中的數字?
[num,txt,raw] = xlsread('test.xlsx');
instructionopen = find(strcmp(raw,'open'),2);
instructionclose = find(strcmp(raw,'close'),2);
% I will try to convert a string cell to characters and the to a number.
open = []
open = []
open2 = []
for i = 1:numel(instructionopen)
open = [open; char(instructionopen(i))];
open2 = [open2; str2num(open(i))];
end
我相信我的編碼是不優雅,但我basicall努力使兩個數組,一個在那裏我將每個字符串元素一個字符然後另一個將它們轉換爲數字。轉換爲字符後的輸出給了我一個看起來像2個漢字的值(!)。我必須在那一步做點事。
我在做什麼錯,或者我怎麼能在這些單元格中實現數字而不是字符串?
編輯
燒杯建議使用地圖容器。我試過
instructions = {'open','close'};
valueSet = [1,2];
mapObj = []
for i = 1:numel(instructionopen)
if instructionopen(i) == 'open'
mapObj = containers.Map(instructions,valueSet)
end
end
但問題是mapObj出來空了,所以我一定在做smoething錯誤。
matlabbit建議使用字符串的長度。我試過
instructiontype = []
for h = 1:length(instructionindex)
instructiontype = [instructiontype; length(instructionindex(h))]
end
但它一直給我的數組元素的1的長度。我找不到函數strlength?
EDIT2 matlabbit建議使用cellfun(長度)
instructionindex = find(strcmp(raw,'Instruction: ')); %gets index of cells that have "Instruction" in them
instructionindex2 = char(raw{instructionindex, 2}); %converts the content of the cells one column to the right (second column) to characters
instructionindex3 = mat2cell(instructionindex2, ones(size(instructionindex2,1),1)); %converts this to a matrix of cells
instructionindex4 = cellfun('length',instructionindex2) %finally performing the conversion to the number that represents the length of the content of each cell
我現在得到的24個雙打矩陣,但他們都是五元(5)......然而,有些應該是四肢(4)。
如果我沒有做過mat2cell,它不會允許我執行長度函數,因爲我一直收到它們不是單元格的錯誤。也許是因爲我之前使用的字符,和我看起來像closecloseclosecloseopenopencloseopenopenopenopen ... ECT值
編輯3:張貼圖片作爲簡化的Excel文件示例
我管理提取條件和試驗的數字,但我需要爲「開放」和「關閉」數字。我試圖將它們轉換爲相應的字符串長度。
我也試過這樣:
instructionindex = find(strcmp(raw(:,1),'Instruction: '));
instructionindex1 = char(raw{instructionindex,2});
instructionindex2 = mat2cell(instructionindex1, ones(size(instructionindex1,1),1));
instructionindex3 = cellfun('length',instructionindex2);
test = zeros(size(instructionindex2));
for h = 1:length(instructionindex2)
if strcmp(instructionindex2{h},'open')
test(h) = 4;
elseif strcmp(instructionindex2{h},'close')
test(h) = 5;
end
end
有趣的是這給了我數,但陣列由0的用於關閉打開和5(!)。我想現在我很好,但我真的很想知道我做錯了什麼!
也許你正在尋找一個[圖](http://www.mathworks.com/help/matlab/ map-containers.html)容器,它可以將字符串作爲鍵映射到數字值。 – beaker
你想要數字5還是文本表示「5」?另外,與5個字符的「close」有關嗎?這真的只是一個操作? – matlabbit
感謝@beaker的建議。我編輯我的問題與我treid解決方案,但我仍然必須做錯錯誤.. – Spica