2015-10-26 123 views
0

我一直在努力尋找一種方法來使用MATLAB將字符串轉換爲.txt文件中的整數。for循環字符串到整數

這裏是什麼我的文件看起來像一個例子:

genes total_muts 
A2M  1 
AARS  4 
AASS  6 
ABCA1 105 
ABCA3 71 
ABCA4 563 

這裏是我使用的腳本:

genes_disease = dataset('file', 'genes_totalshuffle.txt', 'Delimiter', '\t'); 
gene = genes_disease.genes 
total_muts = genes_disease.total_muts 
a = 0 

fileID = fopen('genes_totalshuffled.txt', 'w') 
for k = 1:length(genes_disease) 
    total_muts1 = total_muts(k); 
    num_total_muts = str2num(total_muts1)  
    r = randi([a num_total_muts],1); 
    fprint(fileID, '%4f %4f\n', num_total_muts, r) 
end 
fclose(fileID) 

當我運行該腳本,我得到一個錯誤通知我randn的尺寸輸入需要是數字。我認爲我的問題在於totalmuts變量。這個變量打印字符串而不是整數。我以爲我可以使用str2num(),但我似乎無法得到適當的工作。有什麼建議麼?

*編輯:包括我試圖使用str2num。此外,我試圖生成一個隨機生成的數字,介於0和我的文件中列出的值之間。

+0

您的問題中有幾件事我沒有得到。注意:如果你的變量'var'等於字符串''1''(是嗎?),那麼你可以用'num2str(var)'把它變成一個整數。 –

+1

另外賦值(k:k)沒用,只用(k)。 – Adriaan

+0

「我以爲我可以使用'str2num()',但我似乎無法得到適當的工作」 - 請添加您嘗試使用此代碼。 – Dan

回答

3

您可以使用randi產生0totalmuts之間的數字與

r = randi([0 totalmuts]); 

我不得不改變輸入數據是一個CSV

genes,total_muts 
A2M,1 
AARS,4 
AASS,6 
ABCA1,105 
ABCA3,71 
ABCA4,563 

然後將代碼

genes_disease = dataset('file', 'genes_totalshuffle.txt', 'Delimiter', ','); 
gene = genes_disease.genes 
total_muts = genes_disease.total_muts 
a = 0 

fileID = fopen('genes_totalshuffled.txt', 'w') 
for k = 1:length(genes_disease) 
    totalmuts = total_muts(k); 
    genename = gene(k); 
    r = randi([a totalmuts]); 
    fprintf(fileID, '%4f %4f\n', totalmuts, r) % consider %d or %3d 
end 
fclose(fileID) 

它對我很好,outp使用

1.000000 1.000000 
4.000000 0.000000 
6.000000 3.000000 
105.000000 47.000000 
71.000000 46.000000 
563.000000 400.000000 
+1

'rand(1)'在這種情況下是多餘的。只需要調用'rand'。但是,OP需要**整數**,所以請使用'randi'。 – rayryeng

+0

啊原來的語法是有道理的。 '蘭迪([0 totalmuts],1)' – Steve

+0

@Steve,是的!但是,當我嘗試使用這個時,我得到一個錯誤:'大小和輸入必須是數字'。我不知道如何解決這個問題。 – cosmictypist