2017-04-07 3 views
-1

Pour le calcul des deux lignes, je besoin d'une fonction de recherche qui imprime la première et la dernière ligne qui commence par B.C# Recherche ligne avec startet B

J'ai un fichier qui ressemble à ceci et besoin du numéro après le B, parce que c'est une seconde. Je veux calculer la deuxième durée entre.

Je suis désolé pour le mauvais anglais.

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 
+0

Avez-vous déjà essayé de lire le fichier ligne par ligne? Ces valeurs "B" sont-elles chacune sur leur propre ligne? ... avec la ligne commençant réellement par "B"? Seront-ils toujours contigus sans autres lignes entre eux? etc ... –

Répondre

0

MISE À JOUR: J'ai modifié la réponse puisque vous éclairci le format de fichier

Vous pouvez essayer une expression régulière qui correspond à un mot qui commence par un « B » et est suivi par alpha- caractères numériques. Je ne suis pas très bien avec eux, mais cela semble faire l'affaire:

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 

est ici une façon de l'utiliser:

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); 
} 

Sortie:

enter image description here

+0

Merci :) ça marche – Nero8Eye

+0

Super! Marquer comme la réponse est toujours appréciée. :) –

+0

J'ai un nouveau problème, je veux exporter un datagridview à remplacer et le script que j'ai trouvé m'a donné un bug :( – Nero8Eye

0

Regex est Une excellente façon de lire un fichier, de capturer les informations dont vous avez besoin et de les stocker dans une liste.

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

J'ai trouvé ce here qui montre comment vous pouvez utiliser Regex pour capturer les informations et stocker dans une liste.

Assembler un motif rapide qui fait l'hypothèse que la longueur est toujours la même.

B(?<Seconds>[\d\w]{34})\s

Vous pouvez trouver un test here

Pour ensuite obtenir le premier et dernier match, il est tout simplement le premier accède et dernier élément de la liste.

Un exemple peut être trouvé here.