Hallo Torni,
es ist eine Binärdatei und der Text den du siehst, wird nur vom Hex-Viewer so dargestellt, da es druckbare ASCII-Zeichen sind.
Daher kann der Suchtext mit entsprechender Kodierung in die binäre Darstellung gebracht und so direkt nach diesem gesucht werden.
Die Dateigröße ist recht überschaubar, daher am einfachsten alles aufeinmal einlesen. Das erspart komplizierteren Code bei dem z.B. in einem Buffer gelesen wird (od. mit Pipelines arbeitet).
Als Anstoss -- v.a. zum Suchen des Suchtextes:
using System;
using System.IO;
using System.Text;
Encoding encoding = Encoding.GetEncoding("iso-8859-1"); // what's the correct encoding?
const string searchText = "XSA40_DATENSATZ";
ReadOnlySpan<byte> data = File.ReadAllBytes("Torni.dat");
ReadOnlySpan<byte> searchPhrase = encoding.GetBytes(searchText);
while (!data.IsEmpty)
{
int index = data.IndexOf(searchPhrase);
if (index < 0)
{
Console.WriteLine("Nothing found :-(");
break;
}
Console.WriteLine($"First occurrance of searchText at position {index}");
// Move behind the found searchText
if (data.Length < searchPhrase.Length) break;
data = data.Slice(index + searchPhrase.Length);
if (data.Length < 3) break;
// Move to first int-data
data = data.Slice(3);
string value = encoding.GetString(data.Slice(0, 4));
Console.WriteLine($"Value found: {value}");
// I'll break here, as it's just a demo for you ;-)
break;
}
Dabei wird
Span verwendet, da sich so das Suchen mit
IndexOf trivial gestaltet. Nachdem etwas gefunden wurde, wird mit
Slice die Span "zerschnitten", so dass nur mehr der Rest übrig bleibt und dieser kann weiter untersucht werden.
Ganz klar ist mir noch nicht geworden wie und wo und welche Werte gelesen werden sollen. Aber das solltest du selbst schaffen ;-)
Tipp: sollten Zahlen, etc. gelesen werden, so schau dir die
BinaryPrimitives-Klasse an, welche perfekt mit Span harmoniert.
BTW: warum baust du in deinem Code einen String zusammen, nur damit dieser dann wieder aufgeteilt werden muss um diesen in ein Dictionary zu stopfen? Das kannst du doch direkt ohne den String auch machen? Aber wie erwähnt, mir ist noch immer nicht ganz klar was es werden soll.
mfG Gü