我们有一个带有单独值的字符串,例如 23.N.34.H.67 等 -
问问题
188 次
2 回答
1
既然您的导师建议切片,请查看使用该String.SubString
方法是否是他的想法。我正在使用 lambda 表达式来确定数组的大小,如果您不想像在我的其他示例中那样使用 List 的话。
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 回答