我试图解析这个有超过8,000行硬编码数据验证的方法。其中大多数是数据源中不同字段的相同重复逻辑。
很多看起来像这样(C ++):
temp_str = _enrollment->Fields->FieldByName("ID")->AsString.SubString(1,2);
if (temp_str.IsEmpty())
{ /* do stuff */ }
else
{
if (!IsDigitsOnly(temp_str))
{ /* do different stuff */ }
else
{ /* do other stuff */ }
}
temp_str = _enrollment->Fields->FieldByName("OtherField");
if (temp_str.IsEmpty())
/* do more stuff */
所以基本上,我只需解析每对temp_str = ...
之间的值,然后获得每个唯一的验证" chunk"。
我目前遇到的问题是确定每个" chunk"开始和结束。
这是我的代码:
static void Main(string[] args)
{
string file = @"C:\somePathToFile.h";
string validationHeader = "temp_str = _enrollment->Fields->FieldByName(";
string outputHeader = "=====================================================";
int startOfNextValidation;
List<string> lines = File.ReadAllLines(file).ToList<string>();
List<string> validations = new List<string>();
while (lines.Contains(validationHeader))
{
//lines[0] should be the "beginning" temp_str assignment of the validation
//lines[startOfNextValidation] should be the next temp_str assignment
startOfNextValidation = lines.IndexOf(validationHeader, lines.IndexOf(validationHeader) + 1);
//add the lines within that range to another collection
// to be iterated over and written to a textfile later
validations.Add((lines[0] + lines[startOfNextValidation]).ToString());
//remove everything up to startOfNextValidation so we can eventually exit
lines.RemoveRange(0, startOfNextValidation);
}
StreamWriter sw = File.CreateText(@"C:\someOtherPathToFile.txt");
foreach (var v in validations.Distinct())
{
sw.WriteLine(v);
sw.WriteLine(outputHeader);
}
sw.Close();
}
我的while
语句永远不会被点击,只会立即跳转到StreamWriter
创建,这会创建一个空文本文件,因为validations
为空。
所以我想我的第一个问题是,如何检查以确保仍然存在包含特定&#34;子值的项目时,如何循环List
&#34;在这些项目中?
编辑:
我也尝试了这个;
while (lines.Where(stringToCheck => stringToCheck.Contains(validationHeader)))
根据这个答案; https://stackoverflow.com/a/18767402/1189566
但它说它无法从string
转换为bool
?
答案 0 :(得分:1)
你的意思是这样的吗?
while (lines.Any(x => x.Contains(validationHeader)))
检查validationHeader
是否是列表中任何字符串的一部分。
我也尝试了这个;
while (lines.Where(stringToCheck => stringToCheck.Contains(validationHeader)))
这不起作用,因为LINQ的Where
方法会在您的情况下返回IEnumerable<string>
。 while
循环需要一个布尔谓词。 IEnumerable
不能是true
或false
,因此编译器会抱怨。
答案 1 :(得分:0)
一个简单的检查它是否具有所需值
[ERROR] There was an error managing IEDriverServer (latest version) (java.net.UnknownHostException: selenium-release.storage.googleapis.com)
io.github.bonigarcia.wdm.config.WebDriverManagerException: java.net.UnknownHostException: selenium-release.storage.googleapis.com
at io.github.bonigarcia.wdm.WebDriverManager.getDriversFromXml(WebDriverManager.java:915)
at io.github.bonigarcia.wdm.managers.InternetExplorerDriverManager.getDriverUrls(InternetExplorerDriverManager.java:92)
at io.github.bonigarcia.wdm.WebDriverManager.createUrlHandler(WebDriverManager.java:797)
at io.github.bonigarcia.wdm.WebDriverManager.download(WebDriverManager.java:649)
at io.github.bonigarcia.wdm.WebDriverManager.manage(WebDriverManager.java:567)
at io.github.bonigarcia.wdm.WebDriverManager.fallback(WebDriverManager.java:792)
at io.github.bonigarcia.wdm.WebDriverManager.handleException(WebDriverManager.java:769)
at io.github.bonigarcia.wdm.WebDriverManager.manage(WebDriverManager.java:573)
at io.github.bonigarcia.wdm.WebDriverManager.setup(WebDriverManager.java:287)