我只是尝试针对特定文件执行File.ReadAllLines
,并且对于每一行,都会在|
上进行拆分。我必须在这个上使用正则表达式。
下面的代码不起作用,但你会看到我正在尝试做的事情:
string[] contents = File.ReadAllLines(filename);
string[] splitlines = Regex.Split(contents, '|');
foreach (string split in splitlines)
{
//Regex line = content.Split('|');
//content.Split('|');
string prefix = prefix = Regex.Match(line, @"(\S+)(\d+)").Groups[0].Value;
File.AppendAllText(workingdirform2 + "configuration.txt", prefix+"\r\n");
}
答案 0 :(得分:1)
我并不完全清楚你要做什么,但你的代码中有很多错误。我试图猜测你在做什么,但如果这不是你想要的,请用一些例子解释你最想要的东西:
string inputFilename = "input.txt";
string outputFilename = "output.txt";
using (StreamWriter streamWriter = File.AppendText(outputFilename))
{
using (StreamReader streamReader = File.OpenText(inputFilename))
{
while (true)
{
string line = streamReader.ReadLine();
if (line == null)
{
break;
}
string[] splitlines = line.Split('|');
foreach (string split in splitlines)
{
Match match = Regex.Match(split, @"\S+\d+");
if (match.Success)
{
string prefix = match.Groups[0].Value;
streamWriter.WriteLine(prefix);
}
else
{
// Handle match failed...
}
}
}
}
}
关键点:
using
关键字在这里非常有用。StreamReader
代替ReadAllLines
。match.Success
,如果返回false,则适当地处理错误(跳过该行,报告警告,发出包含相应消息的异常等)。答案 1 :(得分:0)
Regex.Split采用字符串,而不是字符串数组。
我建议分别在每个内容项上调用Regex.Split,然后循环调用该调用的结果。这意味着嵌套for循环。
string[] contents = File.ReadAllLines(filename);
foreach (string line in contents)
{
string[] splitlines = Regex.Split(line);
foreach (string splitline in splitlines)
{
string prefix = Regex.Match(splitline, @"(\S+)(\d+)").Groups[0].Value;
File.AppendAllText(workingdirform2 + "configuration.txt", prefix+"\r\n");
}
}
这当然不是最有效的方法。
更有效的方法可能是拆分正则表达式。我认为这有效:
string splitlines = Regex.Split(File.ReadAllText(filename), "$|\\|");
答案 2 :(得分:0)
您应该将原始字符串传递给Regex.Split
而不是数组。
设置前缀时,您似乎正在使用line
而不是split
。在不知道更多关于你的代码的情况下,我无法判断它是否正确,但无论如何它都是错误的。(它不应该构建)
答案 3 :(得分:0)
我必须假设,根据有限的反馈,这是你正在寻找的:
string inputFile = filename;
string outputFile = Path.Combine( workingdirform2, "configuration.txt" );
using ( StreamReader inputFileStream = File.OpenText( inputFile ) )
{
using ( StreamWriter ouputFileStream = File.AppendText( outputFile ) )
{
// Iterate over the file contents to extract the prefix
string currentLine;
while ( ( currentLine = inputFileStream.ReadLine() ) != null )
{
// Notice the updated Regex - your's is a bit broken
string prefix = Regex.Match( currentLine, @"^(\S+?)\d+" ).Groups[1].Value;
ouputFileStream.WriteLine( prefix );
}
}
}
这将需要一个文件:
Text1231|abc|abc
Text1232|abc|abc
Text1233|abc|abc
Text1234|abc|abc
并放置:
Text
Text
Text
Text
进入新文件。
我希望至少能让你走上正确的道路。我的水晶球变得朦胧.. haaazzzy ..
答案 4 :(得分:0)
在C#中处理文本文件的最佳方法之一可能是使用fileHelpers。看看吧。它允许您强烈键入导入数据。