【问题标题】:c# Find Line with startet B时间:2018-08-10 标签:c#findline with startet B
【发布时间】:2017-09-02 05:22:19
【问题描述】:

对于两行的计算,我需要一个搜索函数来打印以 B 开头的第一行和最后一行。

我有一个看起来像这样的文件,需要 B 后面的数字,因为那是一秒。我想计算两者之间的第二个跨度。

我很抱歉英语不好。

Start File
AXCT XCTrack 0.6.0 - translations: 2017-03-14 17:49:58 on HUAWEI GEM-702L 6.0
HPPLTPILOT:Kay Starkermann
HOSITSite:Schwängimatt
HPCCLCOMPETITION CLASS:FAI-3 (PG)
HPGTYGLIDERTYPE:SKYWALK Spice
HODTM100GPSDATUM:WGS-84
HFALG:GEO
HFDTE060417
LXCTDEVICE eyJjYXBhYmlsaXRpZXMiOnsibWVtQ2xhc3MiOjI1NiwibWVtTGFyZ2VDbGFzcyI6M
LXCTDEVICE jU2LCJuYW4iOnRydWV9LCJkZXZpY2UiOnsiYW5kcm9pZElkIjoiMzRhM2Q1MzBhZm
LXCTDEVICE I4YmViYyIsImJvYXJkIjoiR0VNLTcwMkwiLCJidWlsZElkIjoiSFVBV0VJR0VNLTc
LXCTDEVICE wMkwiLCJjcHVBQkkiOiJhcm02NC12OGEiLCJjcHVBQkkyIjoiIiwiZGV2aWNlU3Ry
LXCTDEVICE aW5nIjoiSFVBV0VJIEdFTS03MDJMIDYuMCIsImRpc3BsYXkiOnsiaCI6MTg0OCwib
LXCTDEVICE W0iOjE1Ljc0ODAzMiwidyI6MTIwMH0sImZpbmdlcnByaW50IjoiSFVBV0VJL0dFTS
LXCTDEVICE 03MDJML0hXR2VtaW5pOjYuMC9IVUFXRUlHRU0tNzAyTC9DMjA5QjIwMzp1c2VyL3J
LXCTDEVICE lbGVhc2Uta2V5cyIsImhhcmR3YXJlIjoiaGkzNjM1IiwibWFudWZhY3R1cmVyIjoi
LXCTDEVICE SFVBV0VJIiwicHJvZHVjdCI6IkdFTS03MDJMIiwic2RrIjoyM30sInhjdHJhY2siO
LXCTDEVICE nsidmVyc2lvbkNvZGUiOjYzLCJ2ZXJzaW9uTmFtZSI6IjAuNi4wIC0gdHJhbnNsYX
LXCTDEVICE Rpb25zOiAyMDE3LTAzLTE0IDE3OjQ5OjU4In19
LXCTSENSOR Sensors: SENSOR_BT, external GPS:true, external baro:true, intern
LXCTSENSOR al baro:false
LXCTEARTHMODEL FAI_SPHERE
B1505404717336N00740471EA0101001091
B1505414717336N00740472EA0101001091
B1505424717335N00740472EA0101001091
B1505434717336N00740472EA0101001090
B1505444717336N00740472EA0100901090
B1505454717336N00740471EA0100901091
B1505464717336N00740471EA0101001091
B1505474717336N00740471EA0101001091
B1505484717336N00740471EA0101001091
B1505494717336N00740471EA0101001091
B1505504717336N00740471EA0101001091
B1505514717336N00740471EA0101001091
End File

【问题讨论】:

  • 您是否尝试过逐行读取文件?这些“B”值是否都在自己的行中?...该行实际上以“B”开头?它们是否总是连续的,中间没有其他线?等等……

标签: c# visual-studio datetime search richtextbox


【解决方案1】:

更新:自从您阐明文件格式后,我已经修改了答案

您可以尝试使用正则表达式来匹配以“B”开头且后跟字母数字字符的单词。我对他们不是很好,但这似乎可以解决问题:

var matches = Regex.Matches(input, @"([B][0-9][A-Za-z0-9]\w+)");

// This says find all matches that:
//    [B]          :  starts with the letter 'B'
//    [0-9]        :  followed by a number
//    [A-Za-z0-9]  :  followed by any alpha-numeric characters
//    \w+          :  and get the whole word

这是一种使用方法:

var input = File.ReadAllText(filePath);

var matches = Regex.Matches(input, @"([B][0-9][A-Za-z0-9]\w+)");

foreach(var match in matches)
{
    Console.WriteLine(match);
}

输出:

【讨论】:

  • 太棒了!将其标记为答案总是值得赞赏的。 :)
  • 我有一个新问题,我想导出一个datagridview来覆盖,我发现的脚本给了我一个错误:(
  • 很抱歉听到这个消息...问一个新问题!
【解决方案2】:

正则表达式是读取文件、捕获所需信息然后存储在列表中的好方法。

MatchCollection matchList = Regex.Matches(Content, Pattern);
var list = matchList.Cast<Match>().Select(match => match.Value).ToList();

我发现了这个here,它展示了如何使用正则表达式来捕获信息并存储在列表中。

组合一个快速模式,假设长度始终相同。

B(?&lt;Seconds&gt;[\d\w]{34})\s

你可以找个测试here

要获取第一个和最后一个匹配项,只需访问列表中的第一个和最后一个项目。

可以在here找到一个例子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    相关资源
    最近更新 更多