我在一个文本文件中存储共享一个键的多个值。文本文件如下所示:

Brightness 36 , Manual
BacklightCompensation 3 , Manual
ColorEnable 0 , None
Contrast 16 , Manual
Gain 5 , Manual
Gamma 122 , Manual
Hue 0 , Manual
Saturation 100 , Manual
Sharpness 2 , Manual
WhiteBalance 5450 , Auto


现在,我想存储每个键的int值和字符串值(例如,亮度)。

C#的新手,找不到有效的工具。

谢谢

最佳答案

使用正则表达式和一点点的linq,您可以做很多事情。
在这里,我假设您知道How to read a Text file

优点:如果文件不完美,则reg exp只会忽略格式错误的行,并且不会引发错误。

这是文件的硬编码版本,请注意,因此会出现\r。取决于您读取文件的方式,但File.ReadLines()情况并非如此

string input =
@"Brightness 36 , Manual
BacklightCompensation 3 , Manual
ColorEnable 0 , None
Contrast 16 , Manual
Gain 5 , Manual
Gamma 122 , Manual
Hue 0 , Manual
Saturation 100 , Manual
Sharpness 2 , Manual
WhiteBalance 5450 , Auto";

string regEx = @"(.*) (\d+) , (.*)";

var RegexMatch = Regex.Matches(input, regEx).Cast<Match>();

var outputlist = RegexMatch.Select(x => new { setting = x.Groups[1].Value
                                              , value = x.Groups[2].Value
                                              , mode  = x.Groups[3].Value });


正则表达式说明:/(.*) (\d+) , (.*)/g

第一捕获组(。*)
  .*匹配任何字符(行终止符除外)
  *量词-匹配零次至无限次,并尽可能多地匹配,并根据需要返回(贪婪)
从字面上匹配字符(区分大小写)

第二捕获组(\ d +)
\d+匹配一个数字(等于[0-9])
+量词-匹配一次和无限次,尽可能多地匹配,并根据需要返回(贪婪)
 ,从字面上匹配字符,(区分大小写)

第三捕获组(。*)
.*匹配任何字符(行终止符除外)
*量词-匹配零次至无限次,并尽可能多地匹配,并根据需要返回(贪婪)



免责声明:

永远不要相信输入!即使是文件,其他程序也可以做到,也可以由客户发送。

根据我的经验,您有两种处理不良格式的方法:
逐行读取,并注册每条不良行。
或忽略它们。你不健康,你不坐!

而且不要告诉自己,这不会发生,它将发生!

09-30 16:51
查看更多