如何将文本文件转换为csv

我有一个列长度固定的输入文件,我需要将文件转换为 csv。


当前代码将其转换为 csv,但列会根据不同长度的空格进行偏移。


如何删除多余的逗号以使列数统一?


C#、Visual Studio 和 CSV


using 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 - O076GG7F

91921221              6835746   1385       GALLAGHER POWER04/18/19  09024922  P90948G0 - O076GHAR

当前输出:


439790,,,,,,,,,,,,,,,,6806991,,,4700,,,,,,,NORTH,AMERICAN,04/18/19,,08161895,,P90947L6,-,O076GG7F

91921221,,,,,,,,,,,,,,6835746,,,1385,,,,,,,GALLAGHER,POWER04/18/19,,09024922,,P90948G0,-,O076GHAR

需要列对齐:


439790,6806991,4700,NORTH,AMERICAN,04/18/19,08161895,P90947L6,-,O076GG7F

91921221,6835746,1385,GALLAGHER,POWER04/18/19,09024922,P90948G0,-,O076GHAR


白板的微信
浏览 77回答 4
4回答

千巷猫影

输入是空格分隔的txt,需要它csvforeach (string line in lines){    var parts = line.Split(' ');    string csvLine = string.Join(',', parts);    Console.WriteLine(csvLine);}这是一个快速修复。对于“官方”csv,您需要考虑放置"文本字段,因此要区分文本和数字。

拉莫斯之舞

这项工作可以在一行中完成,无需显式循环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,-,O076FDE41846201,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)));

慕侠2389804

如果您不确定一行中值之间的空格数,请尝试这个。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);}

MM们

很难准确地说出您在这里要求的是什么,所以我的回答会非常含糊。对于分隔文件,您将分隔某种类型的值,因此我将不得不对这些值是什么做出一些假设。String.Join函数可能正是您在那里寻找的。它产生一个字符串输出,它是用指定分隔符连接的对象数组的产物。(例如 [1,2,3] => "1,2,3")至于将输出写入文件,您需要的功能类似于您用来读取文件的功能。File 对象有一个WriteAllText函数,它将生成一个包含给定文本(作为字符串)的文本文件,或者File.WriteAllLines将有类似的结果,但带有一个字符串数组。
打开App,查看更多内容
随时随地看视频慕课网APP