2012-03-25 11 views
0

這是一個控制檯單位轉換程序,它接受用戶指定的測量單位(如磅,盎司),然後是第二個測量單位,最後是一個轉換值從一個單位到另一個單位。使用通過'.contains'找到的值

string userUnit1, userUnit2 = ""; 
int userValue = 0; 

,可用於在文本文件中被指定的單位,其內容被分成一個字符串數組中的程序(稱爲「單元」)。文本文件還包含兩個單元之間的「轉換值」。在文本文件中,它們看起來像這樣:盎司,克,28.0(因爲每盎司有28克,這個值也放入數組中)。

是在用戶輸入與下面的代碼片段被檢查的單位:

double result = 0; 

if (units.Contains(userUnit1) && units.Contains(userUnit2)) 
{ 
    //??? Something like: 
    //result = userValue */ value in the array element; 
} 

基本若以上檢查語句,用戶進入該單位,我想要做什麼的陣列是使用該數組元素中的轉換值來轉換用戶輸入的數字。我將如何去做這件事?

編輯:這是將分割文本存儲到數組中的代碼。

using (read = new StreamReader("C:/Users/Sam Smith/Desktop/convert.txt")) 
      { 
       while (!read.EndOfStream) 
       { 
        lineFromFile = read.ReadLine(); 
        lineFromFile.Split(' '); 

        foreach (int i in lineFromFile) 
        { 
         count++; 
         if (count % 3 == 0) 
         { 
          units.Add(lineFromFile); 
         } 
        } 
       } 
      } 
+1

您正在錯誤地使用拆分方法。將返回值保存到一個字符串數組中並迭代該數組。而整個功能沒什麼意義...... – SimpleVar 2012-03-25 21:08:10

回答

1

使用indexOf方法爲unit1Index和unit2Index並比較-1,以確保他們被發現,或者使用FirstOrDefault擴展方法,並比較空。

這聽起來像是你應該從中得到一個好消息,這可以通過TryGetValue來簡化。

var conversionsDic = File.ReadAllLines("conversions.txt") 
         .Select(l => l.Split(' ')) 
         .ToDictionary(ls => ls[0] + ls[1], ls => double.Parse(ls[2])); 

double conversion; 
if (conversionsDic.TryGetValue(userUnit1 + userUnit2, out conversion)) 
{ 
    // use 'conversion' to do whatever 
    var result = userValue * conversion; 
} 
2

是這樣的嗎?

String path = @"C:\Users\Sam Smith\Desktop\convert.txt"; 
var lines = System.IO.File.ReadLines(path) 
      .Where(l => l.Contains(userUnit1) && l.Contains(userUnit2)); 
if(lines.Any()) 
{ 
    var unit = lines.First(); 
    var parts = unit.Split(new char[]{','}, StringSplitOptions.RemoveEmptyEntries); 
    var result = userValue * double.Parse(parts[2]); 
} 

您需要Enumerable.WhereSystem.Linq命名空間的引用。您可以使用File.ReadLines檢索文件中的所有行,如IEnumerable<string>

+0

。哪裏有不可用的,有沒有一個特定的系統命名空間? – 2012-03-25 21:16:26

+0

是的,'System.Linq'([Enumerable.Where](http://msdn.microsoft.com/en-us/library/bb534803.aspx))。我覺得你必須乘以價值(相應編輯)。 – 2012-03-25 21:19:23

+0

@BoggyB添加對System.Linq的引用,並查看我的答案:) – SimpleVar 2012-03-25 21:19:48

相關問題