最近由於要優化一些python的指令碼,開始接觸rust這塊的資料。官網提供了乙個比較好文件,只是目前中文化的資料還比較少。基於搜尋程式設計似乎麻煩一點。先根據實際情況在官網文件看了一些說明。先把接觸的問題記錄下來,以留為後面使用。
python讀取xyz檔案比較容易,所需要的**並不多。轉換rust似乎也遇到一些api上和語法的困擾。下面看看如何讀取xyz檔案。xyz的檔案如下,描述乙個分子的三維座標。下面通過rust方式將其提取出來
10c -7.882 1.429 -4.724 c -7.788 0.036 -5.039 h -7.016 -0.607 -4.626 c -8.811 -0.592 -5.798 h -8.733 -1.641 -6.068 c -9.882 0.194 -6.282 c -9.86 1.556 -6.042 h -10.671 2.123 -6.491 c -8.973 2.203 -5.244 h -9.079 3.268 -5.059
看一下rust的這塊程式設計如下寫。在書寫過程,其實花費很長時間找資料,光寫起來,主要不熟悉,編譯過程也遇到一些小問題。其次語法體驗也是要消化比較慢。
下面關於採取讀取檔案和操作字串兩個做法。
裁剪字串使用兩個方法 乙個是 split 另外乙個是split_whitespace,前者可以根據標記來分拆,這種方式也很常見。後者採取去除了空格去分割,後者剛好適合我們提取xyz的原子座標資訊,同時也可以判斷是否原子資訊還是數量。
在實驗過程,遇到乙個型別判斷問題,這個查詢資料沒有具體去解決如何去解決將乙個數字字串判斷為整形型別。採取了split_whitespace方法去處理短期避開了rust型別判斷的事情,滿足了提取xyz座標的問題。因此,暫時採取了這樣方法去提取座標。
use std::fs;use std::time::;fn main() fn readxyz()",line); continue; } let cur_line: vec = line.split_whitespace().collect(); if cur_line.len() > 1 } let duration = start.elapsed(); println!("迴圈的耗時: ", duration); println!("內容",atomlist); }
cargo run 輸出內容
rust提取這樣乙個小小檔案,時間上也很快,在做這個實驗的過程,書寫過程會對本人產生很多語法上干擾,所以寫起來並不是很流暢去解決這個解析檔案過程。大數量批量的情況,如果將mol2檔案批量轉換xyz檔案會相對也會得到時間上的一定提公升。不過呢,實際上python openbabel足夠滿足使用了,不差那麼一點時間的話。只是在rust使用這塊上,還是可以繼續挖掘一些實用的資訊。我想在今後這塊會找到很多實用的點。雖然門檻高,也意味對使用者的要求也有一定提公升空間。
但是在選型這塊,c,c++ ,python 結合資料比較多。rust在資料搜尋上還需要積累一些平民化的案例和資料。
Rust學習筆記
toc rust學習筆記 初步閱讀rust的 以學習rust語言 match 採用表示式的形式,然後根據它的值來分支。分支的每個 臂 都是 val expression 的形式。當值匹配時,這個臂的表示式將被執行實現。之所以稱之為 match 是因為 模式匹配 的術語,而這種正是 match 實現的...
Rust學習筆記1
use rand rng use std cmp ordering use std io fn main println 輸入數字 input match input.cmp guess ordering greater println 高了 ordering less println 低了 對比c...
Rust學習筆記 2 函式
函式在rust中用來實現特定功能。其中,main函式是很多程式的入口點。在rust中用關鍵字fn來定義乙個函式。rust 中的函式和變數名使用 snake case 規範風格。在 snake case 中,所有字母都是小寫並使用下劃線分隔單詞。例如 fn this is a function 函式的...