使用matlab自動化讀取化學分子式各元素係數,可以有效提公升效率,總的來說,該項任務主要有以下兩個步驟:
1、找到字串中各個元素;
2、讀取該元素之後的數字。
在第1步中,非常簡單,直接strfind函式就能找到某個元素,但是第2步包含諸多種情況:
元素之後無係數,表示係數為1;
元素之後無係數且位於字串末尾,此時係數也為1;
元素之後係數大於9,表示係數為多位數字。
根據以上諸多種情況,下面**將一一做出注釋:
function coef =
find_each_coef
(str)
%指定要尋找的所有元素
elements =
'chnosp'
;%初始化係數向量
coef =
zeros(1
,6);
for i =1:
6 ind =
strfind
(str,
elements
(i));if
~isempty
(ind)
%如果找到的該元素位於末尾,係數為1
if ind ==
length
(str)
coef
(i)=1;
else
%否則提取該元素之後的所有字元
s =str(ind+
1:end)
;%如果該元素之後的所有字元不包含字母,直接轉換成係數
if~isnan
(str2double
(s))
coef
(i)=
str2double
(s);
%如果該元素之後僅包含乙個元素,係數為1
elseif length
(s)==
1coef
(i)=1;
%如果該元素之後緊接著另乙個元素,係數為1
elseif ~(s
(1)>=
'0'&&s(
1)<=
'9')
coef
(i)=1;
else
%以上都不是,提取該元素後所有數字,即為係數
count =1;
while
s(count)
>=
'0'&&
s(count)
<=
'9' count = count +1;
endcoef
(i)=
str2double(s
(1:count-1)
);end
endend
endend
以上**實測能很好的實現係數提取的功能,但是存在以下缺點:
1、沒有考慮兩個字母的元素,如ca等,因為任務中沒有遇到,所以就沒考慮。想要改進的話,可以從兩個方向改進:
將兩個字母的元素替換為某個符號,這種方法改動最小,但是效率可能不高;
在搜尋及後續提取係數時考慮兩個字母的元素,這將帶來很大的改動。
2、沒有考慮係數為小數的分子式,這點也很好改。
以上就是該任務的全部內容,總的來說,這種任務比較少見,不是部署到大規模應用上我們怎麼方便怎麼來,也為以後處理字串提供乙個參考。
MATLAB讀取txt中資料
fileid fopen filename fileid fopen filename,permission fileid fopen filename,permission,machineformat fileid fopen filename,permission,machineformat,e...
MATLAB讀取excel檔案中的資料
matlab讀取excel中的資料 讀取sheet1中的資料 num返回的是excel中的資料,txt輸出的是文字內容,raw輸出的是未處理資料 一般情況下,我們讀取的是excel中的資料,所以可以直接用下面的,只輸出資料矩陣便可 eg data,text xlsread h 張教師研究專案 不同波...
matlab 讀取 分層影象
a imread pepper.bmp 讀入 bmp檔案 g rgb2gray a g 為原始bmp圖案的grayscale版本 h,w size g 讀入g的高和寬 bitplane zeros h,w,8 建立8層空plane,分別儲存1 8個分層 subplot 3,3,1 畫在九宮格的第1個...