Re: [問題] 請問讀取excel資料的一個細節問題

看板MATLAB作者 (天)時間9年前 (2016/04/05 20:19), 9年前編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《mozenpee7 (右京)》之銘言: : 請問各位前輩,我有一欄excel資料類似 : 1-1 : 2-13 : 10-2 : 105-223 : 10581-4 : 4 : 5 : 78-3 : 請問我有沒有可能在讀取的時候放入一個矩陣變成兩欄類似 : 1 1 : 2 13 : 10 2 : 105 223 : 10581 4 : 4 0 : 5 0 : 78 3 : 主要是一欄裡面用dash分開的兩個數字 : 我不知道該怎麼讀了再分開 : 然後資料又不是每一欄都有dash,好像又提高複雜度了... : 煩請前輩們指點方向 : 或者其實我只是想要把他們依大小順序排列(先比前面再比後面) : 根本不需要這樣做? : 我現在想的是 : 把一欄資料提出--拆成兩個數字--兩個迴圈分別比前後大小--依原格式新順序輸出 : 100.200筆的資料*10,用人眼整理會瞎掉... 假設你的字串存在test.txt這個檔案,可以這樣寫: fileID = fopen('test.txt','r'); A = textscan(fileID, '%s'); fclose(fileID); A = A{1}; for i = 1:numel(A) A{i} = str2double(strsplit(A{i}, '-')); if numel(A{i}) == 1 A{i} = [A{i}, 0]; end end B = cat(1, A{:}); sortrows(B) ans = 1 1 2 13 4 0 5 0 10 2 78 3 105 223 10581 4 輸出檔案就 dlmwrite('test2.txt', sortrows(B), 'delimiter', '-') 補充: 你是excel檔案的話,假設那串文字存在C2~C9之間,C1是header 那麼用xlsread就可以讀入,然後上面程式碼稍作修改可以得到一樣結果 [~, ~, raw] = xlsread('test.xlsx', 'C2:C9'); for i = 1:numel(raw) if ischar(raw{i}) raw{i} = str2double(strsplit(raw{i}, '-')); else raw{i} = [raw{i}, 0]; end end B = cat(1, raw{:}); sortrows(B) ans = 1 1 2 13 4 0 5 0 10 2 78 3 105 223 10581 4 寫回去要再麻煩一點XD B = sortrows(B); B_cell = cell(size(B,1), 1); for i = 1:size(B,1) B_cell{i} = strjoin(arrayfun(@num2str, B(i, :), 'uni', false), '-'); end xlswrite('test.xlsx', B_cell, 'C2:C9') 最後,如果是要把原本的row也跟著排列,那麼一開始讀入就要整個讀入 然後sortrows要output index,再對整個cell更改,再把B_cell做取代的動作 這部分就不示範了,自行摸索吧。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.218.152.118 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1459858789.A.FDA.html ※ 編輯: celestialgod (180.218.152.118), 04/05/2016 20:36:02

04/06 00:11, , 1F
太感謝了!! m(_ _)m
04/06 00:11, 1F
文章代碼(AID): #1N0wrb_Q (MATLAB)
文章代碼(AID): #1N0wrb_Q (MATLAB)