使用StreamWriter从文本文件中读取并将其写入另一个文本文件,以逗号分隔的格式

本文关键字:文本 文件 另一个 分隔 格式 StreamWriter 读取 使用 | 更新日期: 2023-09-27 17:49:58

我正试图将已从文本文件读取的数据写入另一个文本文件,并将其写入逗号分隔的格式。我需要知道密码是什么才能得出这个结论。这就是我需要帮助的地方。

的例子:

原始数据如下:

Agnico-Eagle矿山
COM
008474108
28996843
716800年
716800年
N/
N/

N/
716800年
N/
Agrium Inc .
COM
008916108
145739616
1646617
1646617
N/
N/

N/
1646617
N/
auico Gold Inc .
COM
05155 c105
504505年
62875年
62875年
N/
N/

N/
62875年
N/A

这就是我想要的数据在RichTextBox中的样子:

Agnico-Eagle矿山,COM, 008474108, 28996843, 716800, 716800, N/A N/A N/A, 716800 N/A
Agrium Inc . COM, 008916108, 145739616, 1646617, 1646617, N/A N/A N/A, 1646617, N/A
奥瑞科黄金股份有限公司,05155C105,504505,62875,62875,N/A,N/A, 62875,N/A

就像你从原始文本数据中知道的那样,我想读取第一行,然后添加一个逗号,然后读取第二行,将其附加到第一行,然后添加一个逗号,这是前12行。第12行末尾没有逗号。然后这个过程又重新开始。

任何信息都是感激的。

谢谢。

下面是我目前为止写的代码。

    private void button1_Click(object sender, EventArgs e)
    {
        using (StreamReader Reader = new StreamReader(@"C:'Original_Text_File.txt"))
        {
            while (!Reader.EndOfStream)
            {
                TextBox1.AppendText(Reader.ReadLine());
            }
        }           
    }
    private void button2_Click(object sender, EventArgs e)
    {
        using (StreamWriter Writer = new StreamWriter(@"C:'Original_Text_File.txt"))
        {
            Writer.WriteLine(TextBox1.Text);
        }
    }

使用StreamWriter从文本文件中读取并将其写入另一个文本文件,以逗号分隔的格式

这是我读取数据的方法:

        var sbText = new System.Text.StringBuilder(10000);
        // Keeps track of your current position within a record
        int wCurrLine = 0;
        // Number of rows in the file that constitute a record
        const int LINES_PER_ROW = 12;
        using (StreamReader Reader = new StreamReader(@"C:'Original_Text_File.txt"))
        {
            while (!Reader.EndOfStream)
            {
                // If we are not on the first row in the record, add a comma
                if (wCurrLine != 0)
                {
                    sbText.Append(",");
                }
                // Add the text
                sbText.Append(Reader.ReadLine());
                // Increment our current record row counter
                wCurrLine++;
                // If we have read all of the rows for this record
                if (wCurrLine == LINES_PER_ROW)
                {
                    // Add a line to our buffer
                    sbText.AppendLine();
                    // And reset our record row count
                    wCurrLine = 0;
                }
            }
            // When all of the data has been loaded, write it to the text box in one fell swoop
            TextBox1.Text = sbText.ToString();

编辑:我刚刚意识到我没有完全回答原来的问题:除非你想在写出来之前看到结果,否则没有理由使用文本框。如果您不需要这样做,您可以替换行:

            TextBox1.Text = sbText.ToString();

:

        using (StreamWriter Writer = new StreamWriter(@"C:'Original_Text_File.csv"))
        {
            Writer.Write(sbText);
        }

(注意文件名扩展名的变化)

假设12是输入文本的神奇数字,

var query = File.ReadLines("a.txt")
                .Select((line,no) => new{line,no})
                .GroupBy(x => x.no/12)
                .Select(g => String.Join(",",g.Select(x => x.line)));
File.WriteAllLines("b.txt",query);

这适用于您的示例输入和预期输出....

如果您只是想用不同的方法从一个文件写入到另一个文件,请尝试这样做:

protected string TextProperty { get; set; }
private void button1_Click(object sender, EventArgs e)
{
    using (StreamReader reader = new StreamReader(@"C:'Original_Text_File.txt"))
    {
        // read all content file to the string property on your form.
        TextProperty = reader.ReadToEnd();    
    }         
}
private void button2_Click(object sender, EventArgs e)
{
    using (StreamWriter writer = new StreamWriter(@"C:'Original_Text_File.txt"))
    {
        // write all content of the property to the file.
        writer.Write(TextProperty);    
    }
}

如果您想逐行分隔或对每行进行特定处理,您可以使用StringBuilder类。

private void button1_Click(object sender, EventArgs e)
{
    using (StreamReader reader = new StreamReader(@"C:'Original_Text_File.txt"))
    {
        StringBuilder builder = new StringBuilder();
        while (reader.Peek() >= 0) 
        {
            builder.AppendLine(reader.ReadLine());
        }
    }
}
要获取StringBuilder的全部内容,只需调用ToString()方法并将其写入文件:
private void button2_Click(object sender, EventArgs e)
{
    using (StreamWriter writer = new StreamWriter(@"C:'Original_Text_File.txt"))
    {
        writer.Write(builder.ToString());
    }
}

NB -我留下这个作为如何做到这一点的一个例子,如果有一个标记(空白行),我错过了读取示例数据,当我写它。


像这样的东西应该可以工作,我没有测试,所以它可能有拼写错误:

注意:我寻找空行(而不是计数)来知道我在记录的末尾。这样,如果您添加另一个字段,代码将不会中断。

    using (StreamReader Reader = new StreamReader(@"C:'Original_Text_File.txt"))
    {
        StringBuilder aLine;
        boolean first = true;
        while (!Reader.EndOfStream)
        {
           // read source line
           string inLine = Reader.ReadLine();
           // if length is zero append to test box (we have a blank line between records)
           if (inLine.Length == 0)
           {
              TextBox1.AppendText(aLine.ToString());
              first = true;
           } 
           // add a comma if we are not the first
           if (!first)
           {
             aLine.Append(",");
           }
           aLine.Append(inLine);
           // next time we won't be first
           first = false;
        }
        TextBox1.AppendText(aLine.ToString());
    }           

创建List<String>,将每一行读入其中。然后字符串。使用,作为分隔符连接列表。当然,在每行开头的列表中调用Clear方法。

private void button1_Click(object sender, EventArgs e)
{
    using (StreamReader Reader = new StreamReader(@"C:'Original_Text_File.txt"))
    {
        var i = 0;
        while (!Reader.EndOfStream)
        {
            if (i % 12 == 11)
            {
                //every 12 lines you read append new line instead of ,
                TextBox1.AppendText(string.Format("{0}'n", Reader.ReadLine()));
            }
            else
            {
                TextBox1.AppendText(string.Format("{0},", Reader.ReadLine()));
            }
            i++;
        }
    }
}
private void button2_Click(object sender, EventArgs e)
{
    using (StreamWriter Writer = new StreamWriter(@"C:'Original_Text_File.txt"))
    {
        using (StringReader Reader = new StringReader(TextBox1.Text))
        {
            while (true)
            {                
                var line = Reader.Readline()
                if(line !=null)
                {
                    Writer.WriteLine(Reader.Readline());
                }
                else
                {
                    break;
                }
            }
        }
    }
}