C#文本创建问题

C#文本创建问题,c#,C#,事情就是这样。我有一个巨大的文本文件,假设每个条目有一行。问题是有时这条线会被一条新的线打断 我编辑整个文件,如果文件不是以(“\”A)开头,我需要将当前行附加到前一行(用“\”替换\n)。我想到的每一件事都不断地把这一行附加到新的一行上。感谢您的帮助 代码: public void step1a() { string begins = ("\"A"); string betaFilePath = @"C:\ext.txt";

事情就是这样。我有一个巨大的文本文件,假设每个条目有一行。问题是有时这条线会被一条新的线打断

我编辑整个文件,如果文件不是以(“\”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);
            }

        }

    }
例如: 来源:
“一个”英雄|苹果|橘子| |为了好玩
“一个”英雄|苹果|芒果|总是充满乐趣
“一个”她的苹果水果不
痛苦就是出路
“一个”英雄|爱|堆积如山|人|更有趣

结果:
“一个”英雄|苹果|橘子| |为了好玩
“一个”英雄|苹果|芒果|总是充满乐趣
“一个”她的“苹果”水果“没有痛苦的方法
“一个”英雄|爱|堆积如山|人|更有趣


我的问题不是查找if(line.StartsWith(begins))它是else语句,它将第2行附加到新行

似乎字符串的格式不正确

试试这个
“\\\\\\\\\\\\\\”

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);
            }

        }

    }

您的问题是
\
是一个C#转义码。
您的字符串被解析为
“A
,因为
\”
是单个
的转义码

您应该将
开头
字符串设置为@字符串,该字符串不使用转义码。
然后,您需要将
翻一倍以避开它。 例如:

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);
    }
}

根据@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);
    } 
} 

这正是您想要的:

    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);
        }
    }

} 
但是,它确实存在附加到现有文件的问题。我建议
使用
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);
            }
        }
    }
} 

我不理解您遇到的问题…请详细说明。@SLaks您不能总是在if部分中使用
WriteLine
。如果该行没有
StartWith
常量,则需要将其与下一行连接。这将在输出文件的开头添加一个额外的空行。我看不出这是如何工作的。看起来像你把新行字符放错了位置,就像OP一样。@Jeffrey L Whitledge:事实上你是对的……我确实看到了da字符串的问题,但没有看到da附加的东西……我的问题不是找到if(line.StartsWith(begins))这是else语句,它将第2行附加到一个新行。这段代码将在一个前缀不正确的行的末尾出现一个前缀正确的行,而不是删除多余的新行字符。@Jeffrey L Whitledge:嗯,不,我认为不会。但是,如果格式正确,它确实忘记打印最后一行的值。我有e修改我的答案。那不行。如果一行格式正确(而不是第一行),你总是写一个换行符。只有在以下行的格式正确的情况下,您才应该这样做。@klausbyskov-嗯,不。只要后面没有写换行符,就可以写这行。实际上,我在发布代码之前测试了这段代码,这就是为什么我是唯一一个在额外换行符之前输出空格字符的人。测试数据需要它,and OP在示例代码中包含了该部分,但它不是问题的焦点。