using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace NMS_logfiles_App_V02
{
class Program
{
static void Main(string[] args)
{
try
{
// Kontrollera att två argument har skickats med
if (args.Length != 2)
{
throw new InvalidOperationException("Kontrollera parametrar");
}
var mc = new Program();
// Läs loggfilen till en byte-array
byte[] bytes = mc.ReadFileToByteArray(args[0]);
// Bearbeta byte-arrayen för att få en lista med ID:n
List<long> skyline = mc.ReadStreamToHwidArray(bytes);
// Läs referensfilen och jämför med ID-listan
mc.ReadDelimitedFile(args[1], skyline);
}
catch (Exception e)
{
// Skriv ut felmeddelande och korrekt användning av programmet
Console.WriteLine("NMS_logfiles_App.exe <log fil> <nms_ref>");
Console.WriteLine(e.Message);
}
}
// Metod för att läsa en fil till en byte-array
byte[] ReadFileToByteArray(string filePath)
{
using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
using (var memoryStream = new MemoryStream())
{
fileStream.CopyTo(memoryStream);
return memoryStream.ToArray();
}
}
// Metod för att bearbeta byte-arrayen och extrahera ID:n
List<long> ReadStreamToHwidArray(byte[] bytes)
{
using (var reader = new StreamReader(new MemoryStream(bytes), Encoding.Default))
{
List<long> skyline = new List<long>();
string line;
// Läs varje rad i byte-arrayen
while ((line = reader.ReadLine()) != null)
{
// Kontrollera om raden innehåller relevant data
if (line.Length > 200 && line.Contains("HeartbeatPB"))
{
// Extrahera ID från raden
if (long.TryParse(line.Substring(159, 11), out long skyline_id))
{
// Lägg till ID i listan om det inte redan finns
if (!skyline.Contains(skyline_id))
{
skyline.Add(skyline_id);
}
}
}
}
// Sortera listan med ID:n
skyline.Sort();
return skyline;
}
}
// Metod för att läsa referensfilen och jämföra med ID-listan
void ReadDelimitedFile(string filePath, List<long> skyline)
{
using (var file = new StreamReader(filePath))
{
string line;
// Läs varje rad i referensfilen
while ((line = file.ReadLine()) != null)
{
var segments = line.Split(new char[] { '\t' }, StringSplitOptions.RemoveEmptyEntries);
// Extrahera ID från raden
if (long.TryParse(segments[0], out long skyline_id))
{
// Skriv ut raden om ID:t inte finns i listan
if (!skyline.Contains(skyline_id))
{
Console.WriteLine(line);
}
}
}
}
}
}
}