【问题标题】:When reading from a text file with readline in C# , how can I read if the position of the line I will read changes in each separate file I will read?在 C# 中使用 readline 从文本文件中读取时,如果我将读取的行的位置在我将读取的每个单独文件中发生变化,我该如何读取?
【发布时间】:2021-11-07 17:51:08
【问题描述】:
'''
2  @42300.693033078707200,34524409=COLOR=SECTION=DISPLAY=-32768
2  @42300.693033078707200,34524409=PATH=NAME=NAME=$PRJ$ARDAHAN2_2.KTB
2  @42300.693033067136000,34524409=SECTION=GENERAL=AMES=EKSENE MESAFE
2  @42300.693033067136000,34524409=SECTION=GENERAL=Z=KAZI KOTU
2  @42300.693033067136000,34524409=SECTION=SECDRAW=AMESBOX=0
2  @42300.693033067136000,34524409=SECTION=SECDRAW=UPDOWN=0
2  @42300.693033067136000,34524409=SECTION=SECDRAW=ZBOX=0
     1      1  26017.770 
     0      -4.9112979     410.4693101  
     0      -3.6365224     410.1894836  
     0       0.4500351     410.3161743  
     0       3.9155980     409.1699524  
     0       5.2604734     410.3972629  SAĞ
     1      2  26020.000 
     0      -4.9799434     410.4674420  SOL
     0      -4.9409100     410.0774536  
     0      -0.8472598     409.1788330  
     0       0.4261363     409.1812134  
     0       0.6297354     409.1988831  
     0       1.8846615     409.1577148  
     0       4.1917279     409.1658325  
     0       5.4726924     410.3473910  SAĞ
     1      3  26030.000 
     0      -5.0000960     410.4676211  SOL
     0      -4.8824235     409.4483337  
     0      -3.8380276     409.4503784  
     0      -0.3250690     409.3630371  
     0       0.4818728     409.3080139  
     0       1.5955057     409.2716064  
     0       4.8345747     409.2607727  SAĞ
'''

我有这个行数可变的文本文件:

我需要在列表框中列出左边为 1 的行(例如:26+017、26+020、26+030)

在我给出的示例中,从 26017.770 到 26020.000 范围内的数据(例如 -4.9112979、4693101)属于 26017.770。

当我点击列表框中列出的 26+017 时

-4.9112979 , 410.4693101 -3.6365224 , 410.1894836 我想在单独的列表框中列出数据。我该怎么做?

您可以在下面的视频中看到我试图解释的列表框示例。 https://youtu.be/MiSVzC8hsQk?t=121 笔记: a) 以 1 或 0 开头的行在 1 和 0 之前有 5 个空格。 b) SAĞ 和 SOL 值,我不会在列表框中使用它们

【问题讨论】:

    标签: c# arrays arraylist readline


    【解决方案1】:

    这里有一些提示:

    将文件读入数组:

    var array = File.ReadAllLines(path);
    

    对于数组中的每一行..

    foreach(var line in array)
    

    如果行以 1 开头

    if(line.StartsWith("1"))
    

    您可以开始将该行和所有后续行(直到下一行)存储在一个保存数据的小对象中

    class Whatever {
      public string MainName { get; set; }
      public List<string> SubItems { get; set; }
    }
    

    对于以 1 开头的每一行,您都可以创建一个新行,将其存储在一个列表中,也可以存储在一个临时变量中(在处理这些行的循环之外声明),这样您就可以在不同的循环迭代中访问它.如果该行不是以 1 开头,则将该行放在子项中

    然后您只需在第一个列表框中显示 MainName,然后单击它时将子项放入第二个列表中。如果您有这些列表,您可以将它们放在列表框的数据源中,并说您希望列表的 DisplayMember 为“MainName”;在您附加到第一个列表框的 SelectedXx 事件处理程序中,您可以获取所选项目,将其转换为“随便”,然后拉出子项目以在 list2 中显示

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-06
      • 1970-01-01
      • 2012-09-21
      • 2013-12-17
      • 2011-11-02
      • 1970-01-01
      • 2014-02-07
      相关资源
      最近更新 更多