C#文本创建问题

时间:2010-03-24 15:09:45

标签: c#

这是怎么回事。我有一个巨大的文本文件,假设每个条目一行。问题是有时线路被新线路打破了。

我编辑整个文件以及文件不以哪个开头(“\”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追加到新行

4 个答案:

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