23.N.34.H.67 ect などの個々の値を持つ文字列があります -
質問する
188 次
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 に答える