2009-11-18 60 views
0

我從那個看起來很像下面模式的配料和批量處理

Job Site File List 
------------------------------- 
1 SiteA file2.txt 2 
2 SiteB file2.txt 2 
3 SiteA file23.txt 23 
4 SiteC file2.txt 2 
5 SiteB file12.txt 12 
6 SiteA file29.txt 29 
7 SiteB file28.txt 28 

分貝我應該啓動情況下爲每個站點(站點A,B & C)查詢的數據,並然後使用,例如,處理siteA,處理file2.txt,file23.txt & file29.txt。這種「處理」可以按某種順序發生,但必須是一個接一個(不同時)。

所以我的第一項任務是整理網站 - 併爲每個創建實例。我該怎麼做呢?

PS:我想通了處理部分,我應該使用某種形式的迭代器模式的...我喜歡的解決方案在任何現代編譯語言...如C#,VB,C++等..

回答

0

我不知道如果我明白你想實現什麼,但我認爲你需要做的是:

  1. 從數據獲取的Site不同值
  2. 對於各得到的值在上一步
    2.1。實例化該網站
    2.2。獲取的File所有相關的值,並處理每一個

在C#中使用LINQ,這將是這樣的:

var siteNames=data.Select(d => d.Site).Distinct(); 
foreach(var siteName in siteNames) { 
    var site=new Site(siteName); //Or use a factory method, a sites list, etc 
    var files=data.Where(d => d.Site==site).Select(d => d.File); 
    foreach(var file in Files) { 
     site.ProcessFile(file); 
    } 
} 
+0

不能使用任何類型的循環......這是我想出了迭代器模式是最好的工作......你也可以顯示同一事物的非linq版本...... – deostroll 2009-11-18 10:07:30

0

我想有一個訪問者對象與遍歷每個哈希表條目。

對於每個條目: - 如果哈希表中不存在,訪問者對象將爲它實例化一個站點。 - 該對象然後將獲取該文件並對其進行處理。

這樣做的好處是您可以一次完成分組和處理。

0

我贊同每個網站的工人的想法。

另外一個問題 - 應用程序狀態。

當您的應用程序啓動時,它是否關注之前發生的事情?當處理一些文件時,請考慮應用程序崩潰。在重新啓動大概應用程序將再次處理文件?那是問題嗎?