2012-03-02 65 views
0

我們有一個熒光光譜儀,以不舒服/笨的方式輸出其熒光數據,以便進一步處理。也就是說,在實際數據開始之前,有55條評論和信息。然後行55開始於列1中的發射波長和列2中的熒光值,其由標籤限制器分開。在這些意見,也有在22行的激發波長中的文件看起來像這樣(行號並不是文件的一部分,我只是說他們清晰。):使用C++或Python從多個輸入文件創建矩陣

Line 1 Stefan 
Line 2 Date: 23.1.2012 
Line 3 WS_40#01.SP 
Line 4 ... 
Line 22 240 
Line 23 ... 
Line 55 300.000000 62.237799 
Line 56 300.500000 59.904189 
Line 57 301.000000 58.901731 
Line 58 ... 
Line 656 600.5  23.900000 

有一個文件對於每個激發波長,其總共對於一個樣品(在5nm步驟中從240到455nm激發)共44個文件。 44個譜圖的一般文件名存儲在一個名爲「filename.txt」的文件中。 44個文件以數字命名,例如FILENAME#01.sp,FILENAME#02.sp,...,FILENAME#44.sp

目標: 我想從這44個文件中創建一個矩陣看起來像這樣(理想情況下,激發波長從管線22取出,但列名也可以手動創建,因爲它們總是相同):

  240 245 250 ... 455 
300.0 62.23 34.4 ... ... 23.5 
300.5 59.90 23.7 ... ... 19.5 
301.0 58.90 23.7 ... ... 34.8 
...  ... ... ... ... 
600.5 23.90 ... ... ... 

最後,矩陣應被存儲在文件稱爲filename.csv

這是如何使用C++或Python可行?

問題是我已經在R中爲此編寫了一個解決方案。但是我們希望爲此提供一個.exe文件,以便實驗室技術人員可以在不熟悉R的情況下完成此任務。幫助我們的實驗室完成重要的事情。

不幸的是,我沒有任何好的python或C++代碼開始。

請讓我知道,如果問題不知何故不清楚。在這種情況下,我會添加一些信息或重新提出問題。

任何直接幫助或鏈接到其他網站/職位是非常感謝。

回答

1

在C++中,您可以使用標準模板庫從文本文件中讀寫std::string。例如:

ifstream filenames ("filename.txt", ifstream::in); 

創建一個從「filename.txt」文件讀取的對象。您可以通過執行以下操作從文件中獲取的每一行:

while (!filenames.eof()) 
{ 
    std::string nextFile; 
    filenames.getline (nextFile); // Note, you may have to #include <string> here 
    // Do something with nextFile here, like open it and read from it, or put it in an array. 
} 

,當你完成讀取文件:

filenames.close(); 

您可以用同樣的方法從每個讀取每一行這44個文件。

0

對於類似於R方式的日常數據分析,您可以使用Pandas Python庫。

要將Python腳本轉換爲.exe文件,您可以使用py2exe

爲了簡化可執行文件的創建,您可以僅使用Python標準庫example編寫腳本。

+0

非常感謝您的幫助,代碼和有用的鏈接。特別感謝爲此任務編寫了python代碼的J.F. Sebastian。不幸的是,代碼在第40行出現以下錯誤消息:** ValueError:無法將字符串轉換爲float:**。在這裏,您可以下載一些示例文件:[file#1](http://almost-published.com/files/WS_40%2301.sp)和[file#2](http://almost-published.com/files /WS_40%2302.sp)和[filename.txt](http://almost-published.com/files/filename.txt)。再次感謝您的時間和幫助。對此,我真的非常感激。 Stefan – Strohmi 2012-03-03 07:47:19

+0

@Strohmi:最後有空行。在填充熒光字典時,應該跳過它們[示例](https://gist.github.com/45188c014c1b262983ce)。如果你自己無法做出這樣的改變,那麼從[tutorial](http://docs.python.org/tut)開始。 – jfs 2012-03-03 14:59:26