为了账号安全,请及时绑定邮箱和手机立即绑定

如何将文本文件转换为csv

如何将文本文件转换为csv

C#
白板的微信 2022-12-24 12:15:34
我有一个列长度固定的输入文件,我需要将文件转换为 csv。当前代码将其转换为 csv,但列会根据不同长度的空格进行偏移。如何删除多余的逗号以使列数统一?C#、Visual Studio 和 CSVusing System;using System.IO;using System.Linq;namespace write_csv{    class Program    {        static void Main(string[] args)        {            string csvfilePath = @"C:\Users\ai_hacker\Desktop\output.csv";            string[] lines = System.IO.File.ReadAllLines(@"C:\Users\ai_hacker\Desktop\orsc1827.ot2");            foreach (string line in lines)            {                var parts = line.Split(' ');                string csvLine = string.Join(',', parts);                Console.WriteLine(csvLine);                File.AppendAllText(csvfilePath, csvLine + Environment.NewLine);            }        }    }}输入:439790                6806991   4700       NORTH AMERICAN 04/18/19  08161895  P90947L6 - O076GG7F91921221              6835746   1385       GALLAGHER POWER04/18/19  09024922  P90948G0 - O076GHAR当前输出:439790,,,,,,,,,,,,,,,,6806991,,,4700,,,,,,,NORTH,AMERICAN,04/18/19,,08161895,,P90947L6,-,O076GG7F91921221,,,,,,,,,,,,,,6835746,,,1385,,,,,,,GALLAGHER,POWER04/18/19,,09024922,,P90948G0,-,O076GHAR需要列对齐:439790,6806991,4700,NORTH,AMERICAN,04/18/19,08161895,P90947L6,-,O076GG7F91921221,6835746,1385,GALLAGHER,POWER04/18/19,09024922,P90948G0,-,O076GHAR
查看完整描述

4 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

输入是空格分隔的txt,需要它csv


foreach (string line in lines)

{

    var parts = line.Split(' ');

    string csvLine = string.Join(',', parts);

    Console.WriteLine(csvLine);

}

这是一个快速修复。对于“官方”csv,您需要考虑放置"文本字段,因此要区分文本和数字。


查看完整回答
反对 回复 2022-12-24
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

这项工作可以在一行中完成,无需显式循环


string csvfilePath = @"C:\Users\Desktop\ooutput.csv";

string[] lines = System.IO.File.ReadAllLines(@"C:\Users\Desktop\orsc1827.ot2");

var result = string.Join(Environment.NewLine, 

                    lines.Select(x => x.Split(' '))

                         .Select(x => string.Join(",", x)));

File.WriteAllText(csvfilePath, result);

样本输入为


string input = @"

     1846223 6833581-1 75522 ADMC 04/17/19 09283609 P9093CC8 - O076FDE4

     1846201 6833581-1 75522 ADMC 04/17/19 09284581 P9093CC4 - O076FDE9";

我在结果字符串中得到了这个输出


1846223,6833581-1,75522,ADMC,04/17/19,09283609,P9093CC8,-,O076FDE4

1846201,6833581-1,75522,ADMC,04/17/19,09284581,P9093CC4,-,O076FDE9

如果你想把最后两个子串放在一起,那么你可以添加


var result = string.Join(Environment.NewLine, 

              lines.Select(x => x.Replace(" - ", "-")

                  .Split(' ')).Select(x => string.Join(",", x)));

如果数据之间有多个空格,则可以通过此更改删除多余的空格


var result = string.Join(Environment.NewLine,

          lines.Select(x => x.Replace(" - ", "-")

               .Split(new char[] { ' '}, StringSplitOptions.RemoveEmptyEntries))

               .Select(x => string.Join(",", x)));


查看完整回答
反对 回复 2022-12-24
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

如果您不确定一行中值之间的空格数,请尝试这个。


RegexOptions options = RegexOptions.None;

Regex regex = new Regex("[ ]{2,}", options);     


string csvline;

foreach (string line in lines)

{

    csvline = regex.Replace(line, ",");

    Console.WriteLine(csvline);

}

如果你确定你只有一个,你可以


string csvline;

foreach (string csvline in lines){

        csvline = line.Replace(' ', ',');

        Console.WriteLine(csvline);

}


查看完整回答
反对 回复 2022-12-24
?
MM们

TA贡献1886条经验 获得超2个赞

很难准确地说出您在这里要求的是什么,所以我的回答会非常含糊。

对于分隔文件,您将分隔某种类型的值,因此我将不得不对这些值是什么做出一些假设。String.Join函数可能正是您在那里寻找的它产生一个字符串输出,它是用指定分隔符连接的对象数组的产物。(例如 [1,2,3] => "1,2,3")

至于将输出写入文件,您需要的功能类似于您用来读取文件的功能。File 对象有一个WriteAllText函数,它将生成一个包含给定文本(作为字符串)的文本文件,或者File.WriteAllLines将有类似的结果,但带有一个字符串数组。


查看完整回答
反对 回复 2022-12-24
  • 4 回答
  • 0 关注
  • 66 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信