2012-03-22 2 views
-1
using (read = new StreamReader("C:/Users/Sam Smith/Desktop/convert.txt")) 
      { 
       while (!read.EndOfStream) 
       { 
        lineFromFile = read.ReadLine(); 
        units = lineFromFile.Split(','); 

        if (units.Contains(splitEntry[0]) && units.Contains(splitEntry[1])) 
        { 
         firstUnit = units[0]; 
         secondUnit = units[1]; 
         userConvertValue = Convert.ToDouble(splitEntry[2]); 
         fileConvertValue = Convert.ToDouble(units[2]); 
         result = fileConvertValue * userConvertValue; 
        } 
        if (units.Contains(splitEntry[0]) && units.Contains(splitEntry[1])) 
        { 
         firstUnit = units[1]; 
         secondUnit = units[0]; 
         userConvertValue = Convert.ToDouble(splitEntry[2]); 
         fileConvertValue = Convert.ToDouble(units[2]); 
         result = userConvertValue/fileConvertValue; 
        } 
        if (!units.Contains(splitEntry[0]) || !units.Contains(splitEntry[1])) 
        { 
         Console.WriteLine("Error, measurement unit not recognised."); 
        } 

위의 파일에는 단위 측정 유형 (파운드, 온스, 마일 등)이 포함 된 텍스트 파일이 있으며,이 파일의 텍스트는 문자열 배열로 나뉩니다. 사용자는 두 개의 단위로 변환하기 위해 다음 형식으로 두 개의 측정 단위를 입력합니다. 단위, 단위, 금액 텍스트 파일에서 두 단위의 변환 양은 매 세 번째 분할 문자열입니다. 단위, 단위 2.80 단위, 단위, 1.27 (기타)배열 및 측정 단위 변환

각 단위 집합과 그 전환 액수를 그룹화하는 방법이 있습니까? 예를 들어, 사용자가 두 개의 특정 단위를 변환하려고하면 프로그램은 최종 결과를 계산할 때 사용할 변환 값을 알고 있습니다. 다소 모호하지만 설명하기 어렵습니다. EDIT : 사용자가 파일과 상호 작용하지 않으면 프로그램은 파일에서 데이터를 가져 와서 문자열 (',')로 분리하고 배열에 저장합니다. 내가 잘못을 가지고하지 않으면

+0

-1 : 불행히도 매우 모호합니다. "텍스트 파일"이 있고 "사용자가"입력하는 것을 돕지 않습니다. 사용자가 텍스트 파일에 내용을 입력합니까? 텍스트 파일의 샘플을 제공하고 사용자가 그 값을 입력 한 이유를 입력 한 다음 프로그램에서 데이터로 수행해야하는 작업을 알려줄 수 있습니까? –

+0

splitEntry 배열의 목적은 무엇입니까? 이 스 니펫 밖에서 선언했다고 가정합니다. –

+0

'splitEntry'의 목적은 사용자의 입력을 배열로 분할하는 것입니다. 그런 다음 배열의 값은 .contains()를 사용하여 'units'배열의 값과 비교하여 검사됩니다. –

답변

0

, 다음 코드는 사용자의 요구 사항을 충족해야한다 (이것은 아주 기본적인의, 처리 오류 등) :

public enum Unit 
{ 
    Pound, 
    Kilo, 
    Kilometer, 
    Mile 
} 

public class UnitMapping 
{ 

    public UnitMapping(Unit source, Unit target, double factor) 
    { 
    SourceUnit = source; 
    TargetUnit = target; 
    Factor = factor; 
    } 

    public Unit SourceUnit { get; private set; } 

    public Unit TargetUnit { get; private set; } 

    public double Factor { get; private set; } 

} 

public class UnitCalculator 
{ 
    public const string FILE_INPUT = @"Kilo,Pound,0.45359237 
            Kilometer,Mile,1.609344"; 


    private List<UnitMapping> mappings; 

    public UnitCalculator() 
    { 
    this.mappings = new List<UnitMapping>(); 

    // parse the mappings 
    foreach (var line in FILE_INPUT.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries)) 
    { 
     var fields = line.Split(','); 

     var source = (Unit)Enum.Parse(typeof(Unit), fields[0]); 
     var target = (Unit)Enum.Parse(typeof(Unit), fields[1]); 
     double factor = double.Parse(fields[2], CultureInfo.InvariantCulture); 

     this.mappings.Add(new UnitMapping(source, target, factor)); 
    } 
    } 

    public double Convert(Unit source, Unit target, double value) 
    { 
    foreach (var mapping in this.mappings) 
    { 
     if (mapping.SourceUnit == source && mapping.TargetUnit == target) 
     { 
     return value * mapping.Factor; 
     } 
     else if (mapping.SourceUnit == target && mapping.TargetUnit == source) 
     { 
     return value * (1/mapping.Factor); 
     } 
    } 

    throw new InvalidOperationException("No mapping could be found for this conversion."); 
    } 

} 

이처럼 호출하지 :

static void Main(string[] args) 
{ 
    var calc = new UnitCalculator(); 
    Console.WriteLine(calc.Convert(Unit.Mile, Unit.Kilometer, 1)); 
} 

단위를 모르는 경우 문자열을 사용할 수도 있습니다.