fork download
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7.  
  8. namespace NMS_logfiles_App_V02
  9. {
  10. class Program
  11. {
  12. static void Main(string[] args)
  13. {
  14. try
  15. {
  16. // Kontrollera att två argument har skickats med
  17. if (args.Length != 2)
  18. {
  19. throw new InvalidOperationException("Kontrollera parametrar");
  20. }
  21.  
  22. var mc = new Program();
  23.  
  24. // Läs loggfilen till en byte-array
  25. byte[] bytes = mc.ReadFileToByteArray(args[0]);
  26.  
  27. // Bearbeta byte-arrayen för att få en lista med ID:n
  28. List<long> skyline = mc.ReadStreamToHwidArray(bytes);
  29.  
  30. // Läs referensfilen och jämför med ID-listan
  31. mc.ReadDelimitedFile(args[1], skyline);
  32. }
  33. catch (Exception e)
  34. {
  35. // Skriv ut felmeddelande och korrekt användning av programmet
  36. Console.WriteLine("NMS_logfiles_App.exe <log fil> <nms_ref>");
  37. Console.WriteLine(e.Message);
  38. }
  39. }
  40.  
  41. // Metod för att läsa en fil till en byte-array
  42. byte[] ReadFileToByteArray(string filePath)
  43. {
  44. using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
  45. using (var memoryStream = new MemoryStream())
  46. {
  47. fileStream.CopyTo(memoryStream);
  48. return memoryStream.ToArray();
  49. }
  50. }
  51.  
  52. // Metod för att bearbeta byte-arrayen och extrahera ID:n
  53. List<long> ReadStreamToHwidArray(byte[] bytes)
  54. {
  55. using (var reader = new StreamReader(new MemoryStream(bytes), Encoding.Default))
  56. {
  57. List<long> skyline = new List<long>();
  58. string line;
  59.  
  60. // Läs varje rad i byte-arrayen
  61. while ((line = reader.ReadLine()) != null)
  62. {
  63. // Kontrollera om raden innehåller relevant data
  64. if (line.Length > 200 && line.Contains("HeartbeatPB"))
  65. {
  66. // Extrahera ID från raden
  67. if (long.TryParse(line.Substring(159, 11), out long skyline_id))
  68. {
  69. // Lägg till ID i listan om det inte redan finns
  70. if (!skyline.Contains(skyline_id))
  71. {
  72. skyline.Add(skyline_id);
  73. }
  74. }
  75. }
  76. }
  77.  
  78. // Sortera listan med ID:n
  79. skyline.Sort();
  80. return skyline;
  81. }
  82. }
  83.  
  84. // Metod för att läsa referensfilen och jämföra med ID-listan
  85. void ReadDelimitedFile(string filePath, List<long> skyline)
  86. {
  87. using (var file = new StreamReader(filePath))
  88. {
  89. string line;
  90.  
  91. // Läs varje rad i referensfilen
  92. while ((line = file.ReadLine()) != null)
  93. {
  94. var segments = line.Split(new char[] { '\t' }, StringSplitOptions.RemoveEmptyEntries);
  95.  
  96. // Extrahera ID från raden
  97. if (long.TryParse(segments[0], out long skyline_id))
  98. {
  99. // Skriv ut raden om ID:t inte finns i listan
  100. if (!skyline.Contains(skyline_id))
  101. {
  102. Console.WriteLine(line);
  103. }
  104. }
  105. }
  106. }
  107. }
  108. }
  109. }
  110.  
Success #stdin #stdout 0.07s 29372KB
stdin
/*  Berechnung des Hamming-Abstandes zwischen zwei 128-Bit Werten in 	*/
/*	einer Textdatei. 													*/
/*  Die Werte müssen auf einer separaten Zeile gespeichert sein			*/
/* 																		*/
/*	Erstellt: 17.5.2010													*/
/*  Autor: Thomas Scheffler												*/

#include <stdio.h>
#include <stdlib.h>

#define ARRAY_SIZE 32

unsigned Hamdist(unsigned x, unsigned y)
{
  unsigned dist = 0, val = x ^ y;
 
  // Count the number of set bits
  while(val)
  {
    ++dist; 
    val &= val - 1;
  }
 
  return dist;
}



int main (void)
{
	char hex;
	int i;
	int a[ARRAY_SIZE];
	int b[ARRAY_SIZE];
	int hamDist = 0;
	FILE* fp;
	
	//Arrays mit 0 initialisieren
	for (i = 0; i < ARRAY_SIZE; ++i)
	{
  		a[i] = 0;
  		b[i] = 0;
	}

	
	fp = fopen("hex.txt","r");
	if (fp == NULL) 
	{
		printf("Die Datei hex.txt wurde nicht gefunden!");
		exit(EXIT_FAILURE);
	}

	i=0;
	printf("1.Zeile einlesen.\n");

 	while((hex=fgetc(fp))!='\n' && hex != EOF)
    {
        a[i]=strtol(&hex,0,16);
		i++;
    }
	i=0;
	printf("2.Zeile einlesen.\n");

 	while((hex=fgetc(fp))!='\n' && hex != EOF)
    {
    	b[i]=strtol(&hex,0,16);
        i++;
    }
	fclose(fp);

	printf("Hamming-Abweichung pro Nibble:\n");
	for (i = 0; i < ARRAY_SIZE; ++i)
	{
		printf ("%i\t%i\t%i\n",a[i],b[i],Hamdist(a[i],b[i]));
		hamDist += Hamdist(a[i],b[i]);
	}
	printf ("\nHamming-Abweichung der Hash-Werte:%d\n",hamDist);
}

stdout
NMS_logfiles_App.exe <log fil> <nms_ref>
Kontrollera parametrar