【问题标题】:Create .CSV File inserting values创建 .CSV 文件插入值
【发布时间】:2016-05-05 16:02:54
【问题描述】:

我是 c# 的新手,所以我想做的是插入三个值,int,string,int,用逗号分隔,例如10,Jesus,1234,当它被插入时,我想将该值导出到 .CSV 文件中,

CSV FILE 的导出方法是这样的

 static void Main(string[] args)
    {
        Console.Write("Insert a number followed by name and finally another number \n" + "* Note: Insert all values separated by comas");

        int value1 = Convert.ToInt32(Console.ReadLine());
        string value2 = Console.ReadLine();
        int value3 = Convert.ToInt32(Console.ReadLine());


        string filePath = "Your path of the location" + "filename.csv";
        if (!File.Exists(filePath))
        {
            File.Create(filePath).Close();
        }
        var line = string.Format("{0},{1},{2}", value1, value2, value3);
        StringBuilder sb = new StringBuilder();
        File.AppendAllText(filePath, line);
        Console.ReadKey();
    }
    }
}

如何插入以逗号分隔的值并导出 .csv 文件?

【问题讨论】:

  • 问题是如何加入任意类型的数组而不仅仅是字符串?
  • 据此声明它将为您创建所需的文件:msdn.microsoft.com/en-us/library/ms143356%28v=vs.110%29.aspx
  • 问题是如何插入以逗号分隔的值,并像单独的列一样读取它,最后将其导出为 .CSV 文件,例如,我写:10,Jose,1000, first column是 10,第二个 Jose,最后一个是 1000 @Chris
  • 如果您想将其作为单独的列阅读,请使用 String.Split 之类的东西。

标签: c# csv export-to-csv


【解决方案1】:

考虑使用:

String strText;

strText = String.Format("{0},{1},{2}", value1, value2, value3);

File.AppendAllText(filePath, strText);

【讨论】:

    【解决方案2】:

    如果您希望用户输入以逗号分隔的一行,那么您只能调用一次Console.ReadLine()。然后你可以使用String.Split() 将它们放入变量中。

    var input = Console.ReadLine();
    var values = input.Split(',');
    var value1 = Convert.ToInt32(values[0]);
    var value2 = values[1];
    var value3 = Convert.ToInt32(values[2]);
    

    然后使用String.Format 将这3 个值重新转换为一行,或者如果您使用的是C# 6,则使用string interpolation

    例如,使用 String.Format 您的代码将是:

    var line = string.Format("{0},{1},{2}", value1, value2, value3);
    

    或者,对于 C# 6 和字符串插值:

    var line = $"{value1},{value2},{value3}";
    

    然后,您可以将此行写入文件:

    File.AppendAllText(filePath, line);
    

    但是,我不知道您为什么要接受逗号分隔的一组值,将它们拆分为组成部分,然后重新组合它们。为什么不直接将用户输入的行写入文件?

    【讨论】:

    • 我按照你说的做,我编辑了我的问题的代码,问题是我不能插入像10,Jose,1000这样的值,因为显然程序想先学习一个int,怎么能我确实在一个字符串中读取这些值并将其分开(我有一个限制,我不能使用拆分功能)
    • 哦,所以您希望用户输入像10,Jose,1000 这样的值并让程序将它们分开?在这种情况下,您需要使用 String.Split() 并且只调用一次 Console.ReadLine()
    • 正是我想做的!但是程序的一个限制是我不能使用Split功能,没有它我该怎么办?
    • 为什么不想使用Split方法?您必须使用String.IndexOf 搜索逗号,然后使用String.Substring 将字符串分开。但这听起来像是在浪费时间。只需使用拆分 ;-)
    • 因为这是 csv 文件(逗号分隔值)的想法,我的管理员希望不进行拆分,他希望仅使用循环、变量等创建程序,而不使用任何方法。我不知道为什么,我非常生气和绝望!你能帮帮我吗?
    【解决方案3】:

    如果您不关心文件中已经存在的内容,为什么不直接在其上追加一个新行?

    static void Main(string[] args)
    {
        Console.Write("Insert a number followed by name and finally another number \n" + "* Note: Insert all values separated by comas");
    
        int value1 = Convert.ToInt32(Console.ReadLine());
        string value2 = Console.ReadLine();
        int value3 = Convert.ToInt32(Console.ReadLine());
    
    
        string filePath = "Your path of the location" + "filename.csv";
        File.AppendAllText(filePath, string.Join(",", value1, value2, value3) + Environment.NewLine);
    
        Console.ReadKey();
    }
    

    编辑:根据 OP 的评论更新

    static void Main(string[] args)
    {
        var filePath = "Your path of the location" + "filename.csv";
    
        Console.WriteLine("Insert a number followed by name and finally another number");
        Console.WriteLine("* Note: Insert all values separated by commas (ex: 10,Jesus,2000)");
        Console.WriteLine("* Note: Enter a blank line to exit");
    
        while(true) // Ad infinitum
        {
            var input = Console.ReadLine();
    
            // on blank line, confirm before exiting the application
            if (string.IsNullOrWhiteSpace(input))
            {
                Console.WriteLine("Do you want to exit the application? (y/n)");
                if (Console.ReadLine().ToUpperInvariant() == "Y")
                    break;
    
                continue;
            }
    
            // input validation : number, anything, number
            var values = input.Split(',');
            if (values.Length != 3 || !Regex.IsMatch(values[0], @"\d+") || !Regex.IsMatch(values[2], @"\d+"))
            {
                Console.WriteLine("Invalid input");
                continue;
            }
    
            // save save to the file
            File.AppendAllText(filePath, string.Join(",", values) + Environment.NewLine);
            Console.WriteLine("The values has been inserted into the csv.");
    
        } // rince and repeat
    }
    

    【讨论】:

    • 问题是我只想在每个寄存器中插入一行,例如10,Jesus,2000,如果程序在不同的行中期望 int、string、int,我该怎么做?
    • 所以您想在一行中输入"number, text, number",并让应用程序接受多个类似的输入?
    • 是的,然后将其导出为 .csv 文件
    • 很好!但是如果没有split 方法,还有另一种形式可以做到这一点?
    猜你喜欢
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多