使用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);
}
}
这是我读取数据的方法:
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;
}
}
}
}
}