数字45后,名称不会递增1

时间:2014-11-08 00:29:48

标签: c# string visual-studio-2010 visual-studio increment

我正在尝试为输出文本文件添加位置名称。 enter image description here

正如您所看到的,我的数字正在递增。但是我编号就像在45号之后我需要将数字重置为1,而 Carousel:45 应该更改为** Carousel1:1 **。但它没有发生......为什么它没有发生。任何帮助请!!!! 我的代码片段:

  public void just_create_text()
    {
        //Here we are exporting header
        string[] strLines = System.IO.File.ReadAllLines(textBox1.Text);
        string CarouselName = enter.Text;
        int[] cols = new int[] { 15, 15, 25, 15, 15 };
        StringBuilder sb = new StringBuilder();
        string line = RemoveWhiteSpace(strLines[0]).Trim();
        string[] cells = line.Replace("\"", "").Split('\t');

        for (int c = 0; c < cells.Length; c++)
            sb.Append(cells[c].Replace(" ", "_").PadRight(cols[c]));

        sb.AppendLine("Location".PadRight(15));
        sb.AppendLine();

        int tmpCarousel = 0;
        int carouselNumber = 0;
        Dictionary<string, int> namesForCarousels = new Dictionary<string, int>();
        for (int i = 0; i < textfile.Count; i++)
        {
            for (int c = 0; c < cells.Length; c++)
                sb.Append(textfile[i].Cells[c].Replace(" ", "_").PadRight(cols[c]));

            string name = textfile[i].Cells[1];

            if (namesForCarousels.TryGetValue(name, out tmpCarousel) == false)
            {
                carouselNumber++;
                   if (carouselNumber > 45)
                    carouselNumber = 1;//resetting to number1, but name is
                   //not changing to Carousel1..
                namesForCarousels[name] = carouselNumber;
            }
            var strCorousel = lstMX.Find(x => x.MAX_PN.Equals(name)).Carousel;
            strCorousel = (String.IsNullOrEmpty(strCorousel)) ? CarouselName : strCorousel;
            sb.Append(String.Format("{0}:{1}", strCorousel, carouselNumber).PadRight(15));

            sb.Append("\r\n");
        }
        System.IO.File.WriteAllText(@"Z:\Desktop\output.TXT", sb.ToString());
    }

输出我需要

我需要在 Carousel :45&gt;&gt;&gt;之后我需要Carousel 1:1 。我怎么能这样做..?

2 个答案:

答案 0 :(得分:1)

设置后,您永远不会使用字典namesForCarousels中存储的数字。可能你想要

    sb.Append(String.Format("{0}:{1}", strCorousel, namesForCarousels[name]).PadRight(15));

此外,您应该将carouselNumber重命名为carouselNumberCounter。它不是当前轮播的数量,它是一个用于为下一个轮播分配号码的计数器。为了更加清晰,请删除局部变量tmpCarousel并执行:

    if (!namesForCarousels.ContainsKey(name))
    {

答案 1 :(得分:0)

如果使用更具描述性的变量名称,您可能会发现更容易理解代码。它并不完全清楚你正在尝试做什么,但我认为你想要为给定的&#34; Max Pn&#34;重复使用相同的轮播号码。如果你已经分配了它 - 目前,你填充了那个映射但是你没有使用它,你依赖于max pn的顺序。我实际上并不知道为什么旋转木马编号不会重置,但如果你整理它,也许你有更好的机会看到正在发生的事情。

同样考虑到你的其他问题的空引用异常,这可以防止这种情况发生 - 虽然它可能表明你的&#34; lstMx&#34的其他地方的另一个问题。

public static void just_create_text()
{
    //Here we are exporting header
    string[] strLines = System.IO.File.ReadAllLines(textBox1.Text);
    string defaultCarouselName = enter.Text;

    int[] columnPaddings = new int[] { 15, 15, 25, 15, 15 };
    StringBuilder completedOutputBuilder = new StringBuilder();
    string line = RemoveWhiteSpace(strLines[0]).Trim();
    string[] cells = line.Replace("\"", "").Split('\t');

    for (int c = 0; c < cells.Length; c++)
        completedOutputBuilder.Append(cells[c].Replace(" ", "_").PadRight(columnPaddings[c]));

    completedOutputBuilder.AppendLine("Location".PadRight(15));
    completedOutputBuilder.AppendLine();

    int carouselNumberForEntry = 0;
    Dictionary<string, int> maxPnToCarouselNumber = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);

    for (int i = 0; i < textfile.Count; i++)
    {
        for (int c = 0; c < cells.Length; c++)
            completedOutputBuilder.Append(_textfile[i].Cells[c].Replace(" ", "_").PadRight(columnPaddings[c]));

        string maxPnForEntry = textfile[i].Cells[1];

        int previouslyAllocatedCarouselNumberForMaxPn = 0;
        if (maxPnToCarouselNumber.TryGetValue(maxPnForEntry, out previouslyAllocatedCarouselNumberForMaxPn) == false)
        {
            // assign a new courousel number for this max pn
            carouselNumberForEntry++;
            if (carouselNumberForEntry > 45)
                carouselNumberForEntry = 1;
            // for better clarity use add
            maxPnToCarouselNumber.Add(maxPnForEntry, carouselNumberForEntry);
        }
        else
        {                    
            // use the carousel number previous assigned for this maxPn
            carouselNumberForEntry = previouslyAllocatedCarouselNumberForMaxPn;
        }

        // find the related max pn carousel entry (if relatedPn is not found this suggests a problem elsewhere)
        MAX_PN_Carousel relatedPn = lstMx.Find(x => x.MAX_PN != null && x.MAX_PN.Equals(maxPnForEntry, StringComparison.OrdinalIgnoreCase));
        // assign the name from the entry, or use the default carousel name if unavailable
        string carouselNameForMaxPn = (relatedPn == null || String.IsNullOrWhiteSpace(relatedPn.Carousel)) ? defaultCarouselName : relatedPn.Carousel;
        // add the new column in the output
        completedOutputBuilder.Append(String.Format("{0}:{1}", carouselNameForMaxPn, carouselNumberForEntry).PadRight(15));
        completedOutputBuilder.Append("\r\n");
    }

    System.IO.File.WriteAllText(@"c:\dev\output.TXT", completedOutputBuilder.ToString());
}