C# 在控制台的单行上显示循环迭代

标签 c# loops for-loop

所以我使用 for 循环遍历 excel 电子表格中的所有行,我可以通过使用“i”定义非常容易地显示当前行号,但是它打印在多行上,因为每个迭代都显示一个控制台.WriteLine() 命令。

我希望它只显示一次,并让它在一行中显示更新的迭代。这是我当前的代码:

void DeleteCells(string filePath)
    {

        int currRowNumber = 0;


        // create excel-instance:
        Application excel = new Application();
        // open the concrete file:
        Workbook excelWorkbook = excel.Workbooks.Open(@filePath);
        // select worksheet. NOT zero-based!!:
        _Worksheet excelWorkbookWorksheet = excelWorkbook.ActiveSheet;

        if(isclosing)
        {
            closeProgram(excel, excelWorkbook);
        }

        int numRows = excelWorkbookWorksheet.UsedRange.Rows.Count;
        Console.WriteLine("Number of rows: " + numRows);
        Console.Write("Checking Row #: " + currRowNumber);


        int numRowsDeleted = 0;
        int nullCounter = 0;
        //for (int j = 1; j <=)

        for (int i = 1; i < numRows + 4; i++)
        {
            //We want to skip every row that is null and continue looping until we have more than 3 rows in a row that are null, then break
            if (i > 1)
            {
                i -= 1;
            }

            //Create Worksheet Range
            Microsoft.Office.Interop.Excel.Range range = (Microsoft.Office.Interop.Excel.Range)excelWorkbookWorksheet.Cells[i, 2];
            string cellValue = Convert.ToString(range.Value);

            if (nullCounter == 5)
            {
                Console.WriteLine("Null row detected...breaking");
                Console.WriteLine("Number of rows deleted: " + numRowsDeleted);
                break;
            }

            if (cellValue != null)
            {
                if (cellValue.Contains("MESSAGE NOT CONFIGURED"))
                {
                    //Console.WriteLine("Deleting Row: " + Convert.ToString(cellValue));
                    ((Range)excelWorkbookWorksheet.Rows[i]).Delete(XlDeleteShiftDirection.xlShiftUp);
                    numRowsDeleted++;
                    //Console.WriteLine("Number of rows deleted: " + numRowsDeleted);
                    nullCounter = 0;
                    i--;
                    currRowNumber++;
                }
                else
                {
                    currRowNumber++;
                    nullCounter = 0;
                }
            }
            else
            {
                nullCounter++;
                //Console.WriteLine("NullCounter: " + nullCounter);
            }
            i++;

        }

        Console.WriteLine("Fixes Finished! Please check your excel file for correctness");

        closeProgram(excel, excelWorkbook);
    }

示例输出:

Row Number: 1
Row Number: 2
Row Number: 3
Row Number: 4
Row Number: 5

等..

我希望它只显示一行并不断更新行号。我会怎么做呢?任何帮助表示赞赏。谢谢。

更新: 所以我有以下循环:

for (int i = 1; i < numRows + 2; i++) //numRows was +4, now +2
        {

            Console.Clear();

            Console.WriteLine("Number of rows: " + numRows);
            Console.Write("Checking Row #: " + currRowNumber);

            //We want to skip every row that is null and continue looping until we have more than 3 rows in a row that are null, then break
            if (i > 1)
            {
                i -= 1;
            }

            //Create Worksheet Range
            Microsoft.Office.Interop.Excel.Range range = (Microsoft.Office.Interop.Excel.Range)excelWorkbookWorksheet.Cells[i, 2];
            string cellValue = Convert.ToString(range.Value);

            if (nullCounter == 3) //was 5
            {
                Console.WriteLine("\nNull row detected...breaking");
                Console.WriteLine("Number of rows deleted: " + numRowsDeleted);
                break;
            }

            if (cellValue != null)
            {
                if (cellValue.Contains(searchText))
                {
                    //Console.WriteLine("Deleting Row: " + Convert.ToString(cellValue));
                    ((Range)excelWorkbookWorksheet.Rows[i]).Delete(XlDeleteShiftDirection.xlShiftUp);
                    numRowsDeleted++;
                    //Console.WriteLine("Number of rows deleted: " + numRowsDeleted);
                    nullCounter = 0;
                    i--;
                    currRowNumber++;
                    rowsPerSecond = i;
                }
                else
                {
                    currRowNumber++;
                    nullCounter = 0;
                }
            }
            else
            {
                nullCounter++;
                //Console.WriteLine("NullCounter: " + nullCounter);
            }
            i++;

        }

我想计算我每秒循环多少行,然后根据该数字根据有多少行计算完成整个循环需要多长时间。

再次感谢任何帮助,谢谢!

最佳答案

在每个循环圆上使用 Clear()打印输出前的方法:

Console.Clear();

关于C# 在控制台的单行上显示循环迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44846148/

相关文章:

postgresql - 通过 postgresql 循环获取活跃行程的数量

c# - 如何在全局平台卡外存储库上设置 key ?

c# - 'is' 运算符不能应用于静态类型的操作数

c# - WriteLine重叠

Java 为 ( x : y) execution

c - 转义 C 中的 if 语句

c++ - 为什么我无法在循环中覆盖变量?

c# - 在不遇到集合修改异常的情况下从列表中删除项目的最有效方法?

c# - C# 中有指数运算符吗?

java - 如何使用枚举中的字符串值作为输入来输出 Java 中该枚举项的其余数据?