【问题标题】:Unable to locate a number found in a text file c#无法找到在文本文件c#中找到的数字
【发布时间】:2016-08-23 09:49:23
【问题描述】:

我有一个应用程序,ST-LINK 也对固件进行编程,然后报告缓冲区大小、数据位等。

我有一个存储这些结果的文本文件。但是,一个批次可能有很多电路板,每次都需要增加一个产品编号。所以我想做的是让程序查看最后一个板报告,看看它是否具有相同的批次号(因为批次将同时完成),如果它确实将产品编号增加 1。如果它没有相同的批号,则必须是新批次,产品编号为1。

目前产品编号没有更新。每次它返回 1。 这是我的代码:

         public int previousNumber()
    {
        int pNumber = 0;
        string line; //set string
        int counter = 0; //create int
       int numberOfLines = File.ReadLines("report.txt").Count();

        System.IO.StreamReader file = new System.IO.StreamReader("report.txt"); //create streamreader

        while ((line = file.ReadLine()) != null) //until no empty lines
        {
            string[] allLines = File.ReadAllLines("report.txt"); //read in report file

            if (allLines[numberOfLines - 9] == batchNumberTextBox.Text)
            {
                pNumber = int.Parse(allLines[numberOfLines - 7]);
            }
            else
            {
                pNumber = 0;

            }
        }
        file.Close();
        pNumber = pNumber + 1;
        return pNumber;
    }

    private void saveReport()
    {
        getValues();

            int number = previousNumber();
            BatchNumber = batchNumberTextBox.Text;
            SerialNumber = serialNumberTextBox.Text;
            ProductNumber = number;
            string ProductNumberString = ProductNumber.ToString();
            string inDate = DateTime.Now.ToString("f",
                  CultureInfo.CreateSpecificCulture("en-UK")); //set date in that format

            try
            {
                board newBoard = new board(BatchNumber, SerialNumber, ProductNumberString, BufferSize, StopBits, Parity, DataBits, baudRate, inDate);
                newBoard.Save("report.txt");
                File.AppendAllText("batches.txt", "BATCH NUMBER: " + BatchNumber + " - DATE: " + inDate + Environment.NewLine);
                System.Windows.MessageBox.Show("Report Saved");
            }
            catch
            {
                System.Windows.MessageBox.Show("Save failed"); //tell user save failed
            }

        }

这是报告的文本文件:

你能在任何地方看到它为什么不能工作吗?我觉得我可能对此采取了一种奇怪的方式,所以如果您能想到更好的方法,将不胜感激!

提前谢谢你, 露西

【问题讨论】:

    标签: c# file search


    【解决方案1】:

    我接受,您的数据样本中的批号是 1234。如果是这样,它与最后一行的偏移量是-10 而不是-9。这是您的错误的主要来源。

    您的代码中还有很多冗余:您多次读取整个文件,同时读取一次并将其所有行存储在一个数组中就足够了。

    previousNumber() 的简化(但仍然正确)版本可能如下所示:

    public int previousNumber()
    {
        var allLines = File.ReadAllLines("report.txt");
        int pNumber = 0;
        if (allLines.Length > 10 && allLines[allLines.Length - 10] == batchNumberTextBox.Text)
            // Note: if the desired value is "1" and not "4096", then the offset is "-8".
            int.TryParse(allLines[allLines.Length - 8], out pNumber);
        return pNumber + 1;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-10
      • 2021-07-05
      • 1970-01-01
      • 1970-01-01
      • 2019-07-28
      • 2017-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多