Regex.Replace 函数和读取文本文件
Regex.Replace function and reading a text file
StreamReader ReadFile;
ReadFile = File.OpenText("..\..\WeatherForecasts.txt");
string line = ReadFile.ReadLine();
if (String.IsNullOrEmpty(line) == false)
{
txtCity.Text = Regex.Replace(ReadFile.ReadLine(), "City: ", String.Empty);
dateTimePicker1.Value = DateTime.Parse(Regex.Replace(ReadFile.ReadLine(), "Date: ", String.Empty));
MinT.Value = decimal.Parse(Regex.Replace(ReadFile.ReadLine(), "Minimum temperature: ", String.Empty));
MaxT.Value = decimal.Parse(Regex.Replace(ReadFile.ReadLine(), "Maximum temperature: ", String.Empty));
Prec.Value = decimal.Parse(Regex.Replace(ReadFile.ReadLine(), "Precipitation: ", String.Empty));
Humidity.Value = decimal.Parse(Regex.Replace(ReadFile.ReadLine(), "Humidity: ", String.Empty));
WindSpeed.Value = decimal.Parse(Regex.Replace(ReadFile.ReadLine(), "Wind Speed: ", String.Empty));
}
ReadFile.Close();
实际上这是有效的,但如果任何数据存储在 WeatherForecasts.txt
我收到此错误消息:
System.FormatException: 'The string was not recognized as a valid DateTime. There is an unknown word starting at index 0.'
所以我改成了
Regex.Replace(ReadFile.ReadLine(), "City: ", String.Empty);
Regex.Replace(ReadFile.ReadLine(), "Date: ", String.Empty);
Regex.Replace(ReadFile.ReadLine(), "Minimum temperature: ", String.Empty);
Regex.Replace(ReadFile.ReadLine(), "Maximum temperature: ", String.Empty);
Regex.Replace(ReadFile.ReadLine(), "Precipitation: ", String.Empty);
Regex.Replace(ReadFile.ReadLine(), "Humidity: ", String.Empty);
Regex.Replace(ReadFile.ReadLine(), "Wind Speed: ", String.Empty);
我得到了一个不同的错误
System.ArgumentNullException: 'Value cannot be null.
Parameter name: input'
如果我不存储数据,它工作得很好。
这就是现在 WeatherForecasts.txt 中存储的数据
City: dddd
Date: 5/27/2020 12:00:00 AM
Minimum temperature: 1
Maximum temperature: 1
Precipitation: -1
Humidity: -2
Wind Speed: 1
抱歉,我不知道你需要什么,所以如果你需要任何其他信息,请告诉我。
您遇到的异常与日期解析有关。默认情况下,Date.Parse
使用计算机本地设置来解析日期,但它可能与您提供的日期(美国区域格式)不匹配。
使用具有以下格式的 Date.ParseExact:
dateTimePicker1.Value = DateTime.ParseExact(Regex.Replace(ReadFile.ReadLine(), "Date: ", String.Empty),"M/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);
StreamReader ReadFile;
ReadFile = File.OpenText("..\..\WeatherForecasts.txt");
string line = ReadFile.ReadLine();
if (String.IsNullOrEmpty(line) == false)
{
txtCity.Text = Regex.Replace(ReadFile.ReadLine(), "City: ", String.Empty);
dateTimePicker1.Value = DateTime.Parse(Regex.Replace(ReadFile.ReadLine(), "Date: ", String.Empty));
MinT.Value = decimal.Parse(Regex.Replace(ReadFile.ReadLine(), "Minimum temperature: ", String.Empty));
MaxT.Value = decimal.Parse(Regex.Replace(ReadFile.ReadLine(), "Maximum temperature: ", String.Empty));
Prec.Value = decimal.Parse(Regex.Replace(ReadFile.ReadLine(), "Precipitation: ", String.Empty));
Humidity.Value = decimal.Parse(Regex.Replace(ReadFile.ReadLine(), "Humidity: ", String.Empty));
WindSpeed.Value = decimal.Parse(Regex.Replace(ReadFile.ReadLine(), "Wind Speed: ", String.Empty));
}
ReadFile.Close();
实际上这是有效的,但如果任何数据存储在 WeatherForecasts.txt
我收到此错误消息:
System.FormatException: 'The string was not recognized as a valid DateTime. There is an unknown word starting at index 0.'
所以我改成了
Regex.Replace(ReadFile.ReadLine(), "City: ", String.Empty);
Regex.Replace(ReadFile.ReadLine(), "Date: ", String.Empty);
Regex.Replace(ReadFile.ReadLine(), "Minimum temperature: ", String.Empty);
Regex.Replace(ReadFile.ReadLine(), "Maximum temperature: ", String.Empty);
Regex.Replace(ReadFile.ReadLine(), "Precipitation: ", String.Empty);
Regex.Replace(ReadFile.ReadLine(), "Humidity: ", String.Empty);
Regex.Replace(ReadFile.ReadLine(), "Wind Speed: ", String.Empty);
我得到了一个不同的错误
System.ArgumentNullException: 'Value cannot be null.
Parameter name: input'
如果我不存储数据,它工作得很好。
这就是现在 WeatherForecasts.txt 中存储的数据
City: dddd
Date: 5/27/2020 12:00:00 AM
Minimum temperature: 1
Maximum temperature: 1
Precipitation: -1
Humidity: -2
Wind Speed: 1
抱歉,我不知道你需要什么,所以如果你需要任何其他信息,请告诉我。
您遇到的异常与日期解析有关。默认情况下,Date.Parse
使用计算机本地设置来解析日期,但它可能与您提供的日期(美国区域格式)不匹配。
使用具有以下格式的 Date.ParseExact:
dateTimePicker1.Value = DateTime.ParseExact(Regex.Replace(ReadFile.ReadLine(), "Date: ", String.Empty),"M/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);