这是怎么回事。我有一个巨大的文本文件,假设每个条目一行。问题是有时线路被新线路打破了。
我编辑整个文件以及文件不以哪个开头(“\”A)我需要将当前行追加到上一行(将\ n替换为“”)。我提出的所有内容都会将这条线附加到一条新线上。任何帮助都是适当的......
代码:
public void step1a()
{
string begins = ("\"A");
string betaFilePath = @"C:\ext.txt";
string[] lines = File.ReadAllLines(betaFilePath);
foreach (string line in lines)
{
if (line.StartsWith(begins))
{
File.AppendAllText(@"C:\xt2.txt",line);
File.AppendAllText(@"C:\xt2.txt", "\n");
}
else
{
string line2 = line.Replace(Environment.NewLine, " ");
File.AppendAllText(@"C:\xt2.txt",line2);
}
}
}
实施例:
原稿:
“\”一个“英雄|苹果|橙|为了这个的乐趣
“\”一个“英雄|苹果|芒果|总是很多乐趣
“\” A“她|苹果|水果|没有
痛苦是方式
“\”A“Hero | love | stackoverflowpeople |更有趣
由于:
“\”一个“英雄|苹果|橙|为了这个的乐趣
“\”一个“英雄|苹果|芒果|总是很多乐趣
“\”A“她|苹果|水果|没有痛苦的方式
“\”A“Hero | love | stackoverflowpeople |更有趣
我的问题不是找到if(line.StartsWith(开头))的else语句,它将line2追加到新行
答案 0 :(得分:2)
好像你的字符串编写得不好......
尝试此"\"\\\"A\""
而不是
public void step1a()
{
string begins = ("\"\\\"A\"");
string betaFilePath = @"C:\ext.txt";
string[] lines = File.ReadAllLines(betaFilePath);
foreach (string line in lines)
{
if (line.StartsWith(begins))
{
File.AppendAllText(@"C:\xt2.txt",line);
File.AppendAllText(@"C:\xt2.txt", "\n");
}
else
{
string line2 = line.Replace(Environment.NewLine, " ");
File.AppendAllText(@"C:\xt2.txt",line2);
}
}
}
答案 1 :(得分:0)
您的问题是\
是C#转义码
您的字符串被解析为"A
,因为\"
是单个"
的转义码。
您应该将begins
字符串设为@ -string,而不使用转义码
然后,您需要通过加倍"
来逃避它。
例如:
const string begins = @"\""A";
请注意,执行此操作的最佳方法是使用StreamWriter
,如下所示:
using(StreamWriter writer = File.Create(@"C:\xt2.txt"))
{
foreach (string line in lines)
{
if (line.StartsWith(begins))
writer.WriteLine(); //Close the previous line
writer.Write(line);
}
}
答案 2 :(得分:0)
基于@ SLaks的例子,这里有一些代码可以解决这个问题:
public static void step1a()
{
string betaFilePath = @"C:\ext.txt";
string[] lines = File.ReadAllLines(betaFilePath);
using (StreamWriter writer = new StreamWriter(File.Create(@"C:\xt2.txt")))
{
string buffer = null;
foreach (string line in lines)
{
if (!line.StartsWith(begins))
{
writer.WriteLine(buffer + line);
buffer = null;
}
else
{
if (buffer != null)
writer.WriteLine(buffer);
buffer = line;
}
}
if(buffer != null)
Console.Out.WriteLine(buffer);
}
}
答案 3 :(得分:0)
这样做你想要的:
CopyFileRemovingStrayNewlines(@"C:\ext.txt", @"C:\xt2.txt", @"""\""A");
使用这种方法:
public static void CopyFileRemovingStrayNewlines(string sourcePath, string destinationPath, string linePrefix)
{
string[] lines = File.ReadAllLines(sourcePath);
bool firstLine = true;
foreach (string line in lines)
{
if (line.StartsWith(linePrefix))
{
if (!firstLine)
File.AppendAllText(destinationPath, Environment.NewLine);
else
firstLine = false;
File.AppendAllText(destinationPath, line);
}
else
{
File.AppendAllText(destinationPath, " ");
File.AppendAllText(destinationPath, line);
}
}
}
但它确实存在附加到现有文件的问题。我建议using
一个StreamWriter
而不是AppendAllText
。像这样:
public static void CopyFileRemovingStrayNewlines(string sourcePath, string destinationPath, string linePrefix)
{
string[] lines = File.ReadAllLines(sourcePath);
bool firstLine = true;
using (StreamWriter writer = new StreamWriter(destinationPath, false))
{
foreach (string line in lines)
{
if (line.StartsWith(linePrefix))
{
if (!firstLine)
writer.WriteLine();
else
firstLine = false;
writer.Write(line);
}
else
{
writer.Write(" ");
writer.Write(line);
}
}
}
}