2

23.N.34.H.67 ect などの個々の値を持つ文字列があります -

4

2 に答える 2

1

あなたのメンターがスライスを提案したので、String.SubStringメソッドを使用することが彼の考えであるかどうかを確認してください. 他の例のようにリストを使用したくない場合は、ラムダ式を使用して配列のサイズを決定しています。

static void Main(string[] args)
{
    FileStream telData;
    List<int> myNumbers = new List<int>();
    telData = new FileStream(@"C:\temp\inputdata.txt", FileMode.Open);
    StreamReader strmRead = new StreamReader(telData);
    string d = "";
    string tempdata;

    while ((tempdata = strmRead.ReadLine()) != null)
    {
        d += tempdata;
    }
    telData.Close();


    Console.WriteLine(AverageParsedValues(d, 'H'));
    Console.WriteLine(AverageParsedValues(d, 'P'));
    Console.WriteLine(AverageParsedValues(d, 'T'));
    Console.ReadLine();

}

static double AverageParsedValues(string data, char match)
{
    int start;
    int end;
    int[] value = new int[data.Where(c => c == match).Count()];

    int index =0;
    int temp;

    for (int i = 0; i < data.Length-1; i++)
    {
        if (data[i] == match)
        {
            start = data.IndexOf(':', i) + 1;
            end = data.IndexOf(':', start);
            if (int.TryParse(data.Substring(start, end - start), out temp))
            {
                value[index] = temp;
                index += 1;
            }
        }
    }
    return value.Average();
}

編集:変更されたメソッドは、配列またはリストの必要性をなくします:

static double AverageParsedValues(string data, char match)
{
    int start;
    int end;
    int value = 0;
    double count = 0; //Double so that we return a double not an integer
    int temp;

    for (int i = 0; i < data.Length-1; i++)
    {
        if (data[i] == match)
        {
            start = data.IndexOf(':', i) + 1; // Find Start of Data
            end = data.IndexOf(':', start); // Find End of Data
            if (int.TryParse(data.Substring(start, end - start), out temp))
            {
                value += temp;
                count += 1;
            }
        }
    }
    if (count != 0) //Check for divide by zero
        return value / count;
    else
        return 0;
}
于 2012-11-21T19:05:55.927 に答える
0

次のようにして、テキスト ファイルからすべてのテキストを読み取り (テキストに newLines があるかどうかはわかりません)、各値の文字列を抽出します。その後、これらの文字列を自分に最も適した方法で解析できるようになります。

            string inputString = File.ReadAllText(@"E:\inputdata.txt");
            List<string> D = new List<string>();
            List<string> H = new List<string>();
            List<string> P = new List<string>();
            List<string> T = new List<string>();
            List<string> R = new List<string>();
            while (inputString.Length > 0)
            {
                int index = inputString.IndexOfAny(new char[] { 'D', 'T', 'H', 'P', 'R' },1);
                string subStr = string.Empty;
                if (index >= 0)
                {
                    subStr = inputString.Substring(0, index - 1);
                    inputString = inputString.Substring(index);
                }
                else
                {
                    subStr = inputString;
                    inputString = string.Empty;
                }
                switch (subStr[0])
                {
                    case 'D':
                        D.Add(subStr.Substring(1).Trim(':'));
                        break;

                    case 'T':
                        T.Add(subStr.Substring(1).Trim(':'));
                        break;

                    case 'H':
                        H.Add(subStr.Substring(1).Trim(':'));
                        break;
                    case 'P':
                        P.Add(subStr.Substring(1).Trim(':'));
                        break;
                    case 'R':
                        R.Add(subStr.Substring(1).Trim(':'));
                        break;
                }

            }
于 2012-11-21T19:15:09.247 に答える