【问题标题】:C# Add a blank value in between string in of CSV fileC#在CSV文件的字符串之间添加一个空白值
【发布时间】:2019-05-24 05:52:04
【问题描述】:

我在从列表生成的字符串上有这个,我如何在字符串之间添加一个空白值。

       using (var file = File.CreateText()
        {
            foreach (var permutation in result)
            {
                file.WriteLine(string.Join(",", permutation));
                //i++;

            }
        }

结果如下:

字符串结果 = A,B,C,D,E,F,G,H,I,J

如何在特定索引处的结果中添加空白值“,”

示例:A,B,C,D,E,F, ,G,H,I,J

注意:结果是一个排列,长度不一致

Result 是一个 IEnumerable 可以拆分吗?

【问题讨论】:

  • 使用循环for你会很容易知道你的索引。
  • 顺便说一句,如果元素在 permutation 集合中,那么结果会很好,您不必修改它。 var permutation是什么类型的?

标签: c# string csv


【解决方案1】:

您可以使用逗号作为分隔符拆分字符串,浏览您的字符并将它们添加到列表中。在所需的索引处添加一个额外的空字符串并将数据重新连接在一起。这样您就不必在连接字符串时决定是否需要添加逗号。

var index = 6;

var data = "A,B,C,D,E,F,G,H,I,J";
var chars = data.Split(new [] { ',' });

List<string> resultData = new List<string>();

var i = 0;
foreach (var c in chars) {                                              
    if (i == index) {
        resultData.Add(" ");
    }

    i++;

    resultData.Add(c);
}

var result = string.Join(",", resultData.ToArray();

【讨论】:

  • 忘记添加结果是 IEnumerable 可以拆分吗?
  • 如果您的初始数据已经是 IEnumerable,那么您可以将拆分部分留在外面,并在代码的 foreach 循环中使用该数据。
【解决方案2】:

您可以使用以下基本算法来遵循您的问题代码逻辑:

        using (var file = File.CreateText())
        {
            int i = -1;// Loop counter
            int termReplacementIndex = 3;// Input or constant to find letter to replace

            foreach (var permutation in result)
            {
                i++;

                if (i == ((termReplacementIndex * 2) - 2))// Only stops on letters not commas
                {
                    file.WriteLine(string.Join(",", " ,"));// Adding of blank " "
                }
                file.WriteLine(string.Join(",", permutation));// Adding of letter
            }
        }

【讨论】:

  • 否则你可以使用数组将字符串分成字符,用逗号分割
【解决方案3】:

如果排列是一个列表,您可以在所需的索引处插入一个空值:

using System;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        var list = new List<string>();

        list.Add("test 1");
        list.Add("test 2");
        list.Add("test 3");

        list.Insert(2, null);

        var str = string.Join(",", list);

        Console.WriteLine(str); // test 1,test 2,,test 3
    }
}

【讨论】:

    【解决方案4】:

    在加入之前修改集合,这样您就不必拆分它并再次对其进行迭代。
    随着permutation 的侧面变化,您可能会尝试在 X 更大时插入索引 X permutation.Count() 而不是ArgumentOutOfRangeException 我决定在最后添加元素。但是你必须定义它。

    public string CsvProjection(List<string> inputs, int needleIndex, string needleValue)
    {
        if (needleIndex < 0)
        {
            throw new ArgumentOutOfRangeException("needleIndex must be positive.");
        }
        if (needleIndex > inputs.Count())
        {//Either throw an exception because out of bound or add to the end
            inputs.Add(needleValue);
        }
        inputs.Insert(needleIndex, needleValue);
        return string.Join(",", inputs);
    }
    

    用法只需将值和索引变量相加:

    var needleIndex= 2; 
    var needleValue = "My New Value";
    
    using (var file = File.CreateText()
    {
        foreach (var permutation in result)
        {
            file.WriteLine(CsvProjection(permutation, needleIndex, needleValue));
        }
    }
    

    【讨论】:

    • 到底是个“神经病”?
    • @Nyerguds,已修复。这是一个错字 E 和 D 非常接近。责备阅读障碍或星期五的帖子。搜索“C# Needle insert”和“C# needleIndex”,给出了很多接近的结果。所以我想针这个词在那里并没有被误用。用于将一个元素插入到数组中,用针指向哪里的想法。但是我的英语不好,可能只是用错了词。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    相关资源
    最近更新 更多