Comparaison de la feuille Excel au file text

J'ai datatables suivantes d'une feuille Excel:

06:07:00 6:07 Data1 Data2 Data3 Data4 06:15:00 06:15 Data5 Data6 Data7 Data8 

Je veux comparer ceci aux données suivantes du file text:

 XXXXXXXXXX 06:08:32 13.0 Data1 XXXXXXXXXX 06:08:45 6.0 Data2 xxxxxxxxxx 06:08:51 5.0 Data3 xxxxxxxxxx 06:08:56 13.0 Data4 xxxxxxxxxx 06:13:44 9.0 Data5 xxxxxxxxxx 06:13:53 11.0 Data6 xxxxxxxxxx 06:14:04 6.0 Data7 xxxxxxxxxx 06:14:10 13.0 Data8 

Comme je veux utiliser le time pour comparer les deux files (excel avec le text), le time est différent pour chaque groupe. Group1 (data1 to Data4), group2 (Data5-data8).

Est-ce que quelqu'un a une idée de la situation?

EDIT1:

Voici ce que j'ai essayé de faire:

 private void doTest(ssortingng time) { TimeSpan ts = TimeSpan.Parse(time); int hours = ts.Hours; int min = ts.Minutes; int sec = ts.Seconds; int minstart, minend; ssortingng str; minstart = min - 5; minend = min + 5; while (min != minend) { sec = sec + 1; if (sec < 60) { if (hours < 10) str = hours.ToSsortingng().PadLeft(2, '0'); else str = hours.ToSsortingng(); if (minstart < 10) str = str + minstart.ToSsortingng().PadLeft(2, '0'); else str = str + minstart.ToSsortingng(); if (sec < 10) str = str + sec.ToSsortingng().PadLeft(2, '0'); else str = str + sec.ToSsortingng(); chkwithtext(str); } else if (sec == 60) { sec = 00; min = min + 1; str = hours.ToSsortingng() + min.ToSsortingng() + sec.ToSsortingng(); chkwithtext(str); } } } private void chkwithtext(ssortingng str) { // check with the text file here if time doesn't match go // back increment the time with 1sec and then check here again } 

Il n'est pas précisément clair comment vous comparez les time, mais pour cette réponse, je supposerai que datatables du file text doivent être comparées si, et seulement si, l'horodatage est dans les x minutes (par défaut pour x = 5) de l'horodatage Excel.

Ma recommandation serait d'utiliser un complément Excel appelé Schematiq pour cela – vous pouvez download ceci (environ 9 Mo) à partir de http://schematiq.htilabs.com/ (voir les captures d'écran ci-dessous). C'est gratuit pour une utilisation personnelle et non commerciale. (Avertissement: je travaille pour HTI Labs, les auteurs de Schematiq.)

Cependant, je ferais le traitement du time dans Excel. D'abord, nous calculons les limites de début / arrêt pour les horodateurs Excel. Par exemple, pour la première fois (06:07:00), nous voulons la gamme 6: 02-6: 12. Nous allons également casser les heures réelles, «commencer» et «fin» en heures, minutes et secondes pour faciliter plus tard. La fiche de données Excel ressemble à ceci:

entrez la description de l'image ici

Ensuite, nous avons besoin d'une «fonction de model» de Schematiq qui prendra les heures de début et de fin et nous renverra une série de fois. Ce model est affiché ici:

entrez la description de l'image ici

Les valeurs d'input de cette fonction sont effectivement des valeurs «fausses» – la fonction est compilée en interne par Schematiq et peut ensuite être appelée avec toutes les inputs requirejses. La cellule «Résultat» contient du text commençant par «~ # …» (et également plusieurs des cellules précédentes) – cela indique un lien de données Schematiq contenant une table, une fonction ou une autre structure. Pour le voir, vous pouvez cliquer sur la cellule et regarder dans Schematiq Viewer qui apparaît comme un volet de tâches dans Excel comme ceci:

entrez la description de l'image ici

En d'autres termes, Schematiq vous permet de contenir toute une table de données dans une seule cellule .

Maintenant, tout est configuré, nous importons simplement le file text et obtenons Schematiq pour faire le travail pour nous. Pour chaque «groupe de time» dans datatables Excel, une plage de time appropriée est générée et correspond à celle du file text. Vous êtes returnné toutes datatables correspondantes, plus toutes datatables inégalées provenant d'Excel et du file text. Les calculs nécessaires sont présentés ici:

entrez la description de l'image ici

Votre feuille de calcul Excel est donc minuscule et, en cliquant sur la cellule finale, vous afficherez les résultats finaux dans Schematiq Viewer. Les résultats, y compris datatables Excel et le «calcul du model», sont affichés ici:

entrez la description de l'image ici

Pour être clair, ce que vous voyez dans cette capture d'écran est l'intégralité du contenu du classur – il n'y a pas d'autres calculs qui se déroulent ailleurs que dans les cellules réelles que vous voyez.

Les «résultats finaux» eux-mêmes sont présentés ici:

entrez la description de l'image ici

C'est exactement la comparaison que vous searchz (avec une erreur délibérément introduite – Data9 – dans le file text, pour démontrer la correspondance). Vous pouvez ensuite effectuer toutes les comparaisons ou parsings complémentaires dont vous avez besoin.

Tous les liens de données représentent l'utilisation des fonctions Schematiq – la syntaxe est très similaire à Excel et donc facile à saisir. À titre d'exemple, l'appel dans la cellule finale est:

 =tbl.SelectColumns(D21, {"Data","Text file"}, TRUE) 

Ceci sélectionne toutes les colonnes de la table Schematiq dans la cellule D21 en dehors des colonnes "Données" et "Fichier text" (l'argument boolean final à cette fonction indique "tout sauf").

Je vous reorderais de download Schematiq et d'essayer cela pour vous-même. Je serais très heureux de vous envoyer une copy du cahier de travail que j'ai rassemblé, alors il devrait tout simplement fonctionner immédiatement.

Je ne sais pas si je comprends ce que vous voulez dire, mais je commencerais par exporter le file Excel vers csv ; séparateur – il est beaucoup plus facile de travailler de cette façon. Ensuite, une class de conteneur simple:

 public class DataTimeContainer { public ssortingng Data; public ssortingng TimeValue1 = ssortingng.Empty; public ssortingng TimeValue2 = ssortingng.Empty; } 

Et utilisez-le de cette façon:

 //Processint first file List<DataTimeContainer> Container1 = new List<DataTimeContainer>(); ssortingng[] lines = File.ReadAllLines("c:\\data1.csv"); ssortingng groupTimeValue1 = ssortingng.Empty; ssortingng groupTimeValue2 = ssortingng.Empty; foreach (ssortingng[] fields in lines.Select(l => l.Split(';'))) { //iterating over every line, splited by ';' delimiter if (!ssortingng.IsNullOrWhiteSpace(fields[0])) { //we're in a line having both values, like: //06:07:00 ; 6:07 groupTimeValue1 = fields[0]; groupTimeValue2 = fields[1]; } else //we're in line looking like this: // ; DataX Container1.Add(new DataTimeContainer(){Data = fields[1], TimeValue1 = groupTimeValue1, TimeValue2 = groupTimeValue2}); } //Processing second file List<DataTimeContainer> Container2 = new List<DataTimeContainer>(); lines = File.ReadAllLines("c:\\data2.txt"); foreach (ssortingng[] fields in lines.Select(l => l.Split(';'))) { Container2.Add(new DataTimeContainer() { TimeValue1 = fields[1], TimeValue2 = fields[2], Data = fields[3]}); } DoSomeComparison(); 

Bien sûr, j'utilise les strings en tant que types de données car je ne sais pas quel genre d'objects ils sont supposés être. Dites-moi comment cela fonctionne pour vous.

S'il s'agit d'une comparaison ponctuelle, je vous reorderais simplement de tirer le file text dans Excel (en utilisant les outils Text-to-Columns si nécessaire) et d'y effectuer une comparaison avec les fonctions embeddedes.

Si toutefois vous devez le faire fréquemment, quelque chose comme Tarec a suggéré serait un bon début. Il semble que vous essayez de comparer des journaux d'events distincts dans un intervalle de time donné (?) – votre vie sera plus facile si vous parsingz les objects avec les propriétés DateTime au lieu de comparer les strings de text.

Remplissez vos données de vos 2 sources (excel et file text) en 2 lists.
Assurez-vous que les lists sont du même type. Je vous recommand de convertir vos données Excel en format de file text … puis de remplir chaque ligne de file text et datatables du file Excel dans la list des strings.
Ensuite, vous pouvez comparer votre list en utilisant les methods LINQ ou Enumerable. Le moyen le plus rapide de comparer deux List <>