2012-03-25 3 views
0

これは、ユーザーが指定した測定単位(ポンド、オンスなど)を受け取り、2番目の測定単位、最後に変換する値を取るコンソール単位変換プログラムです1つのユニットから他のユニットへ'.contains'で見つかった値の使用

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

使用することができるユニットは、プログラムで(「ユニット」と呼ばれる)は、文字列のアレイに分割されている内容はテキストファイルで指定されています。テキストファイルには、2つのユニット間の「変換値」も含まれています。テキストファイルでは、オンス、グラム、28.0のように表示されます(1オンスで28グラムなので、この値も配列に入れられます)。ユーザーは次のコードスニペットで確認されて入る

単位:

double result = 0; 

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

チェック上記のステートメントは、ユーザーが入力ユニット、そして私がやりたいの配列が使用の場合は、基本的なその配列要素の変換値は、ユーザーが入力した数値を変換します。私はこれについてどうやって行くのですか?

EDIT:分割されたテキストを配列に格納するためのコードです。

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

Splitメソッドを誤って使用しています。戻り値を文字列の配列に保存し、配列を繰り返します。関数全体が意味をなさない... – SimpleVar

答えて

1

unit1Indexとunit2IndexにIndexOfメソッドを使用してと比較-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.WhereためSystem.Linq名前空間への参照が必要です。 File.ReadLinesを使用すると、ファイル内のすべての行をIEnumerable<string>として取得できます。

+0

。ここでは使用できませんが、特定のシステム名前空間がありますか? –

+0

はい、 'System.Linq'([Enumerable.Where](http://msdn.microsoft.com/en-us/library/bb534803.aspx))。代わりに値を掛けなければならないと思う(それに応じて編集される)。 –

+0

@BoggyB System.Linqへの参照を追加し、私の答えをチェックしてください:) – SimpleVar

関連する問題