2013-10-11 24 views
0

我需要幫助matlab使用'strtok'在文本文件中找到一個ID,然後讀入或操作該ID所在行的其餘部分。我也需要這個函數來查找(最好使用strtok)所有出現的相同ID並以某種方式將它們分組,以便我可以找到平均值。在示例代碼:Matlab字符串操作

ID list being input: 
(This is the KOIName variable) 
010447529 
010468501 
010481335 
010529637 
010603247......etc. 

File with data format: 
(This is the StarData variable) 
ID>>>>Values 

002141865 3.867144e-03 742.000000 0.001121 16.155089 6.297494 0.001677 

002141865 5.429278e-03 1940.000000 0.000477 16.583748 11.945627 0.001622 

002141865 4.360715e-03 1897.000000 0.000667 16.863406 13.438383 0.001460 

002141865 3.972467e-03 2127.000000 0.000459 16.103060 21.966853 0.001196 

002141865 8.542932e-03 2094.000000 0.000421 17.452007 18.067214 0.002490 

不要被我張貼的例子被誤導,是第一個數字是重複約15行,則ID的變化和去整組不同的ID的,那麼他們是再次重複整個組,再考慮[1,2,3],[1,2,3],主要區別在於我需要在matlab中平均出來的ID的值。

我當前的代碼是:

function Avg_Koi 

N = evalin('base', 'KOIName'); 

file_1 = evalin('base', 'StarData'); 

global result; 

for i=1:size(N) 
[id, values] = strtok(file_1); 
result = result(id); 
result = result(values) 
end 

end 

感謝您的任何援助。

+0

什麼是「結果」?你不能用同一個詞來標識一個變量和一個函數。然後你使用它作爲id和值。咦? – dmm

+0

此外,假設evalin在'StarData'上工作(並且我不確定它會如何),那麼file_1將不會是char變量,因此您無法在其上使用strtok。鍵入「whos」(不含引號)來查看您的變量。 – dmm

+0

我無法理解你的問題,但我很確定你想使用「加載」,而不是「evalin」。輸入「幫助加載」。您不想評估KOIName和StarData中的表達式(因爲沒有),您只需要將數據加載到可以操作的Matlab變量中。 – dmm

回答

1

你讓我們猜了很多,所以我想你想是這樣的:

load StarData.txt 

IDs = { 010447529; 
     010468501; 
     010481335; 
     010529637; 
     010603247; 
     002141865} 

L = numel(IDs); 
values = cell(L,1); 

% Iteration through all arrays and creating an cell array with matrices for every ID 
for ii=1:L; 
    ID = IDs{ii}; 
    ID_first = find(StarData(:,1) == ID,1,'first'); 
    ID_last = find(StarData(:,1) == ID,1,'last'); 

    values{ii} = StarData(ID_first:ID_last , 2:end); 
end 

現在,當您訪問索引ii=6 adressing的ID = 002141865

MatrixOfCertainID6 = values{6}; 

你:

0.0038671440 742  0.001121 16.155089 6.2974940 0.001677 
0.0054292780 1940 0.000477 16.583748 11.945627 0.001622 
0.0043607150 1897 0.000667 16.863406 13.438383 0.001460 
0.0039724670 2127 0.000459 16.103060 21.966853 0.001196 
0.0085429320 2094 0.000421 17.452007 18.067214 0.002490 

...作進一步計算。