Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von gfoidl
Thema: "Duplikate" mit Revisionsnummer auflisten
Am im Forum: Datentechnologien

Hallo dscNRW,

was soll denn passieren wenn mehr als eine Revision vorhanden ist?

Als Denkanstoß allgemein: group by und / oder max bzw. min.

mfG Gü

Thema: Eigenen Auth-Handshake über TCP entwickeln
Am im Forum: Netzwerktechnologien

Hallo Loofsy,

wenn Abts Vorschläge nicht angewandt werden können*, so kann der ASP.NET Core WebServer Kestrel dazu verwendet werden. Als Beispiel siehe MultiProtocolAspNetCore. D.h. Kestrel, als verifizierter WebServer, übernimmt die ganze Arbeit für dich und du brauchst nur via ConnectionHandler die Logik hinzufügen.

* sollte das ein Vorgesetzter so vorschreiben, so hat dieser keine Ahnung und betreibt Geld- / Ressourcenvernichtung

mfG Gü

Thema: Asynchron in mehreren Threads Daten Generieren führt hin und wieder zur NullReferenceException?
Am im Forum: Rund um die Programmierung

Hallo Sebastian1989101,

ehrlich gesagt hab ich noch nicht ganz verstandes was erreicht werden soll, aber so wie ich es verstanden habe wäre Parallel Linq / PLinq eine Option dafür.
Duplikate können mit GroupBy "gefiltert" werden, etc.

mfG Gü

Thema: Roslyn: CSharpCompilation.Emit missachtet Referenzen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Fabiano,

die Solution kompiliert bei mir wenn ich in Fipscode.CodeGenerator.csproj diie Referenzen hinzufüge:


<Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <TargetFramework>netstandard2.0</TargetFramework>
    </PropertyGroup>

    <ItemGroup>
        <PackageReference Include="System.CodeDom" Version="5.0.0" />
        <PackageReference Include="System.Reflection.Emit" Version="4.7.0" />
    </ItemGroup>

</Project>

BTW: ich dachte es ist ein Roslyn Source Generator. Sind dir diese bekannt? Damit kann zur Entwurfszeit Code erstellt werden und verweidet dies zur Laufzeit -- sofern möglich.

mfG Gü

Thema: Roslyn: CSharpCompilation.Emit missachtet Referenzen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Fabiano,


<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

</Project>

Hat mich auch schon ein paar Nerven gekostet, aber es geht (momentan) nur mit .NET Standard 2.0 als TFM.

Edit: dazu gibt es eine Issue Don't limit Source Generators to "netstandard2.0" target framework · Issue #45162 · dotnet/roslyn

mfG Gü

Thema: Stacktrace von einem Thread ausgeben
Am im Forum: Rund um die Programmierung

Hallo Th69,

du hast die Möglichkeit eines unglücklich gewählten Ausdrucks vergessen ;-)

Gemeint ist damit, dass in VS der Debugger ähnliche Möglichkeiten wie beim F5-Debuggen bietet. Nur die tatsächliche Ausführung vom Code findet nicht statt (wie auch).
Also wenn jemand Erfahrung mit dem VS-Debugger hat, so bietet sich hier eine ähnliche Erfahrung an.

(Kann gut sein, dass heute mein Deutsch nicht recht besonders ist)

mfG Gü

Thema: Stacktrace von einem Thread ausgeben
Am im Forum: Rund um die Programmierung

Hallo Sebrahi,

Zitat
Um zu schauen wo der Thread hängt um den Fehler zu beheben wäre es für mich sehr sinnvoll zu wissen wo es hängt.
Da rate ich dir zu Dump files in the Visual Studio debugger.
Erstell also einen Dump (kann auch automatisch erfolgen) und analysiere diesen. Einfach gehts mit Visual Studio. Dort den Dump öffnen und du bekommst eine Debugger-Erfahrung. Kannst dir also die Threads inkl. Stack ansehen, Variablen-Werte, etc.

Weniger einfach, dafür aber mit mehr Möglichkeiten, gehts mit WinDbg und SOS-Erweiterung. Aber VS tut es i.d.R. auch.

mfG Gü

Thema: Stacktrace von einem Thread ausgeben
Am im Forum: Rund um die Programmierung

Hallo Sebrahi,

eine direkte Unterstützung für dein Vorhaben gibt es in .NET nicht*.
Das "Stack walking" ist aber ein Runtime-Feature, das intern oft verwendet wird. Nicht nur bei Fehlern, sondern v.a. während einer Garbage Collection um "Roots" in Form von lokalen Variablen (die auf dem Stack liegen) zu finden.

Wenn du nun die Stack-Information eines anderen Threads (wirklich) während der Programmausführung benötigst, so würde ich das via Debugger-/Profiler-APIs machen da es dort Zugriff auf die Stacks gibt. Aber recht trivial ist das nicht.

Sollte der Code im Thread unter deiner Kontrolle sein, so kannst du dort ja via Event, Callback etc. den StackTrace generieren lassen mittels


StackTrace stackTrace = new(fNeedFileInfo: true);   // vom jeweils aktuellen Thread
Console.WriteLine(stackTrace);

Als Textrepräsentation gibt es auch Environment.StackTrace vllt. reicht dir diese Info schon aus? Wenn die Debug-Symbole (*.pdb) vorhanden sind, so werden auch die Zeilennummern angezeigt.
Übrigens gibt es dafür für .NET Core eine nette neue Projekteinstellung um die Debug-Symbole direkt in die Assembly einzubetten, so dass diese immer vorhanden sein und kein Symbol-Server benötigt wird:

<PropertyGroup>
    <DebugType>embedded</DebugType>
</PropertyGroup>

Gehts hingegen eher um "post mortem" Analysen, so können Heapdumps mit Debuggern (bzw. Erweiterungen) wie SOS diese Information liefern.

* früher gab es noch die Überladung new StackTrace(thread, ...)

mfG Gü

Thema: Ereignisse in C#
Am im Forum: Grundlagen von C#

Hallo Speedys_Work,

[FAQ] Kommunikation von 2 Forms kann hier analog angewandt werden.

mfG Gü

Thema: Task mit spez. Namen starten/killen
Am im Forum: Grundlagen von C#

Hallo M.Lach ,

ja.

mfG Gü

Thema: Task mit spez. Namen starten/killen
Am im Forum: Grundlagen von C#

Hallo M.Lach ,

Zitat
nur in der Taskliste (Taskmanager)
Meinst du jenen von Windows?
Das wäre somit ein Prozess der gestartet werden muss. Angezeigt wird dort der Prozessname (von z.B. der exe).
Zitat


Task t = Task.Run(new Action(taskname2));
Das ist ein Task-Objekt.
Dem kann kein Name gegeben werden. Einem Thead kannst du benennen, damit z.B. in der Thread-Übersicht das erkenntlich ist.
Zitat
Und wie "kille" ich dann diesen wieder?
Entweder lebt der Prozess od. Task von alleine ab, wenn die Aktion, die ausgeführt werden soll, fertig ist od. der Prozess wird geKillt, der Task kann abgebrochen werden mittels Task cancellation.

Was hast du wirklich vor?

mfG Gü

Thema: Fehlermeldungen zentral abfangen ohne Programm danach zu beenden
Am im Forum: Rund um die Programmierung

Hallo DeSchneller,

das switch kannst du dir -- zumindest wie es da steht -- sparen, da keine Fälle unterschieden werden (nur der default-Fall ist da).
Fürs switch schau dir auch Using pattern matching switch statements an.

Zitat
Wie kann ich das verhindern?
Es gibt auch Fehler die nicht behandelbar sind und den Prozess zwangsweise beenden. Z.B. StackOverflowException, OutOfMemoryException udgl. Siehe dazu auch AppDomain.UnhandledException.

Um welchen Tech-Stack handelt es sich: WinForms, WPF, ...?

Für die MessageBox interessant als Lektüre: Nenne deinen Fall, wo du denkst, ohne modalen Dialog geht es nicht, und ich nenne eine Alternative

mfG Gü

Thema: Ich realisiere Parallel.Invoke mit await Task.Run , gibt es Nachteile oder Unterschiede?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Sebrahi,

Ergänzung / Hinweis:

Zitat von T-Virus
Parallel.Invoke auf den Abschluss der Operationen wartet.
Und zwar derart dass der aufrufende Thread (z.B. der Main-Thread) blockiert od. für eine Operation der auszuführenden verwendet wird.
Daher ist auf [FAQ] Warum blockiert mein GUI? zu achten.

Würde der Code wie folgt geschrieben sein


public static async Task Start_myMethod1_asyncron()
{
    await Task.Run(() => {
        myMethod1();
    });
}
public static async Task Start_myMethod2_asyncron()
{
    await Task.Run(() => {
        myMethod2();
    });
}

public static async Task Main(string[] args)
{

    await Task.WhenAll(Start_myMethod1_asyncron(), Start_myMethod2_asyncron());

    //difference?

    Parallel.Invoke(myMethod1, myMethod2);

}
so wird zwar per Task.WhenAll auf das Ende der Ausführungen asynchron gewartet (await), aber während dieser Zeit ist der aufrufende Thread (hier: Main-Thread) "frei" und könnte andere Aufgaben erledigten.
Beim Parallel.Invoke ist das wie erwähnt nicht möglich.

Das soll jetzt nicht heißen dass Parallel.Invoke eher schlecht ist, sondern je nach konkreter Aufgabe kann es sogar sehr nützlich sein.

Zitat von T-Virus
Wenn du einfach stumpf Methoden aufrufen willst, die auch keinen Rückgabewert/Parameter haben, kannst du das mit Parallel.Invoke machen.
Parallel Linq (PLinq) ist eine weitere Option die ganz passend sein kann.

mfG Gü

Thema: C# Intersection
Am im Forum: Grundlagen von C#

Hallo Borbes,

kannst du bitte genauer schreiben was du erreichen willst?
Hab die Frage jetzt ein paar mal gelesen, so wirklich schlau werde ich daraus nicht.

Können die Zahlen in den Listen beliebig angeordnet sein?
Streng genommen bei einer Liste ja nicht, aber meinst du Menge? Dann wären alle Permutation von {1, 2, 3} gleichwertig zu betrachten.

Die Schnittmenge an sich ist ja exakt definiert, aber was verstehst du unter "Schnittmenge" bzw. was soll herauskommen? Beim gezeigten Beispiel dass die 5. mit den anderen ähnlich ist od. dass auch 5 in der Schnittmenge ist?

Gehts um einen Ähnlichkeitsvergleich von gegeben Listen?
"Ähnlichkeitsmaße" gibt es ja etliche und je nach Kontext besser geeignet. Noch hab ich aber keine Ahnung worum es wirklich geht.

Der Ansatz von dannoe ist grundsätzlich vernüftig, nur passt dieser zur Aufgabe?

mfG Gü

Thema: Jahr Angabe - Hilfe für einen Beginner
Am im Forum: Grundlagen von C#

Hallo Wilfried,

ist eine schöne Lösung!
Nur wenn in die Zukunft (z.B. 2030) gegangen werden soll, so klappt das nicht, da 1930 herauskommen würde.

Daher sollte der Hinweis von Stefan.Haegele unbedingt berücksichtigt werden.

mfG Gü

Thema: Jahr Angabe - Hilfe für einen Beginner
Am im Forum: Grundlagen von C#

Hallo T-Virus,

Zitat
Für das jahr Problem kannst du ja einfach prüfen ob das Jahr kleiner als 1000 ist.
Wenn ja, dann kannst du einfach + 2000 drauf rechnen und hast das entsprechende Jahr.
Kommt darauf an welches Regelwark gelten soll. Ist 50 2050 od. 1950? Je nachdem sollte ein präzisere Unterscheidung (siehe oben) durchgeführt werden.

mfG Gü

Thema: Jahr Angabe - Hilfe für einen Beginner
Am im Forum: Grundlagen von C#

Hallo specialist,

schau mal:


using System;

#nullable enable

while (true)
{
    Console.Write("Bitte gib diesen Monat in Zahl ein: ");
    string? monthInput = Console.ReadLine();

    if (!int.TryParse(monthInput, out int month) || (month < 1 || month > 12))
    {
        Console.ForegroundColor = ConsoleColor.Yellow;
        Console.WriteLine("Ungültiger Wert für einen Monat eingegeben. Erlaubt sind Zahlen 1 bis 12.");
        Console.ResetColor();
        continue;   // Schleife wieder von vorne beginnen
    }

    Console.Write("Bitte gib das Jahr ein: ");
    string? yearInput = Console.ReadLine();

    if (!int.TryParse(yearInput, out int year))
    {
        Console.ForegroundColor = ConsoleColor.Yellow;
        Console.WriteLine(@"Ungültiger Wert für ein Jahr eingegeben. Erlaubt sind Zahlenwerte, wobei eine zwei Ziffern Eingabe
wie folgt behandelt wird:
jj <  50 -> 20jj
jj ≥ 50 -> 19jj");
        Console.ResetColor();
        continue;   // Schleife wieder von vorne beginnen
    }

    year += year switch
    {
        < 50 => 2000,
        ≥ 50 and < 100 => 1900,
        _ => 0
    };

    DateTime dateTime = new DateTime(year, month, 1);

    Console.ForegroundColor = ConsoleColor.Green;
    Console.WriteLine($"Wir haben {dateTime:MMMM yyyy}");
    Console.ResetColor();
}
Davon ausgehend kannst du es beliebit erweitern bzw. das dir Unbekannte nachlesen (in der Doku). Wenn du dann irgendwo hängst, so frag einfach nach.

mfG Gü

Thema: ASP.NET WebAnwendung soll mit Windows Dienst sprechen
Am im Forum: Web-Technologien

Hallo Pardasus,

Zitat
einen Windows Dienst
Läuft dieser auf .NET Full od. .NET Core?
Ich würde Letzteres bevorzugen, einfach da es mehr Möglichkeiten gibt.
Zitat von Pardasus
Seite bauen die Informationen darüber anzeigt, was der Dienst den gerade so treibt.
Je nachdem welche Informationen und in welchem Intervall gibt es verschiedene Varianten in Ergänzung zu Abts Beitrag.
Die hier angeführten können als "Push-Modell" betrachtet werden im Gegensatz zu den bisher genannten "Pull-Modellen".
  • Der Windows-Service ist zugleich ein SignalR-Server, der "Notifications" aussendet und diese werden von der Monitoring-Seite abonniert.
  • Der Windows-Service hat eine EventSource und schreibt in diese die Log-Events, die Monitoring-Seite ist eine Senke dieser Events in Form eines EventListeners

Letztere Variante bietet durch diese Infrastruktur (ist einfacher als es ausschaut) auch die Möglichkeiten mit Diagnose-Werkzeugen ala dotnet-trace, Visual Studio, etc. diese Ereignisse zu analysieren. Od. durch einen speziellen EventListenere auch Alarme zu erzeugen falls eine Metrik eine bestimmten Grenzwert übersteigt / unterschreitet.

Kannst du ein bischen konkreter werden welche Infos angezeigt werden sollen? Damit die Möglichkeiten besser bewertet werden können.
Und auch ob Windows-Service und die Monitoring-Seite im selben Netz / Rechner sind spielt eine gewisse Rolle (Sicherheit).

mfG Gü

Thema: List<> Generic in Basisklasse
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo jkrt,

Zitat
ich lese die Softwareversion des Gerätes und muss dann abhängig von dieser die Daten empfangen und verarbeiten.
um ein paar Entwurfsmuster die da angewandt werden können zu nennen und um dir ein schönes Wochenende zu bereiten ;-)
Damit kannst du die Unterscheidung durchführen und dann mit der konkreten Instanz die Daten lesen / halten.

mfG Gü

Thema: Aufbaue einer Datenbankabfrage mit variablen Filtern
Am im Forum: Datentechnologien

Hallo Kriz,

genau.

Statt simplen String-Verkettungen würde ich aber einen QueryStringBuilder erstellen.
Zuerst die einzelnen Filter in einer Liste speichern und dann daraus am Ende das SQL Statement erzeugt, da so auch einfach parametrisierbar ist.
So kannst du problemen mit den and-"Verknüpfungen" von vornhinein aus dem Weg gehen.

Klar?

mfG Gü

Thema: Aufbaue einer Datenbankabfrage mit variablen Filtern
Am im Forum: Datentechnologien

Hallo Kriz,

greifst du mit dem SqlClient auf die DB zu od. wird ein O/R-Mapper ala EF Core, etc. verwendet?

Beim SqlClient kann das Statement (der SQL-String) manuell zusammengestöpselt werden. Achte dabei aber auf [Artikelserie] SQL: Parameter von Befehlen (das hat auch den Vorteil dass im SQL Server der Query-Plan gecached werden kann und so eine bessere Leistung vorhanden ist).

mfG Gü

Thema: DLLImport und Kommunikation mit C++ DLLs
Am im Forum: Grundlagen von C#

Hallo vnvjan,

das eigentliche Problem hab ich zu wenig verfolgt, aber bei


[DllImport(@"Master.dll", EntryPoint = "[email protected]@[email protected]@[email protected]", CallingConvention = CallingConvention.StdCall, SetLastError = true)]
"muss" ich darauf hinweise, dass dieses Vorgehen sehr fragil ist, da durch das Name mangling der EntryPoint bei jeder Version von Master.dll anders sein kann.

Der korrekte Weg wäre hier einen C-Wrapper (zumindest einen extern "C" Export) für die C++ Bibliothek zu erstellen und dann diesen Namen im EntryPoint zu verwenden.
Sonst gibt es später einmal ein Problem und dessen Ursachenforschung mag schwierig sein, da an dies eher nicht gedacht wird (zumindest nicht sofort).

mfG Gü

Thema: Hello World! myCSharp auf .NET
Am im Forum: Ankündigungen

Hallo zusammen,

endlich finde ich auch die Zeit um ein paar Worte dazu schreiben zu können.

Als ich mich aktiv an der Entwicklung beteiligte war das Projekt schon sehr fortgeschrittenn und dementsprechend auch groß. Das Zurechtfinden innerhalb des Projekts war jedoch wider meines Erwartens relativ einfach, da Abt in Bezug auf Archtitektur, Muster, etc. großen Wert legt(e) und daher so gut wie alles klar und sauber strukturiert war / ist.

Die Zusammenarbeit an diesem Projekt, die ja nach wievor voranschreitet, hat mir einfach Spass und Freude bereitet. Da ich beruflich nur On Premises unterwegs bin, konnte ich für mich neue Möglichkeiten erkunden und erforschen und dabei auf Abts Wissen und Unterstützung zurückgreifen. Danke Ben!

Wie bereits erwähnt wurde, ging jede Änderung via Pull Requests (PRs). Dabei hatten wir etliche konstruktive Diskussionen wie und ob wir etwas noch besser machen könnten. Manchmal wurden bestimmten Ideen zeitlich nach hinten verschoben, damit ein Feature erstmal produktiv werden kann und die Verbesserungen später durchgeführt werden können. Das ein od. andere mal mussten wir uns auch gegenseitig vor der "over engineering"-Falle bremsen ;-) und in anderen Punkten waren wir wohl beide ziemlich gleich stur :-) (haben aber immer eine vernüftige Lösung gefunden).

Interessant und spanned ist der Punkt an dem ein Projekt "live" geht immer, hier war es für mich aber besonders interessant, da im "Versuchs-Forum" die Last gering war und dort alle unserer Ziele / Features funktionierten. Im "Live-Forum" mit vielen Benutzer und gleichzeitigen Zugriffen tauchten dann ein paar latente Bugs auf, die meisten ließen sich auf Race-Bedingungen in Zusammenhang mit dem ThreadPool zurückführen, da dieser nun wesentlich mehr Task zu verarbeiten hat als im Versuchs-Forum (so z.B. das Versenden der Emails). (Anmerkung: dies Bugs sind alle behoben).

Es wurde bereits erwähnt, dass wir überlegen bestimmte Teile vom Foren-Code zu veröffentlichen und ein paar Artikel über unsere Erkenntnisse (siehe vorhin) und Muster sowie Tipps und Tricks die wir angewandt haben zu erstellen.
Aber da wir all dies in unserer Freizeit machen, können wir keine verbindliche Zusage zu Terminen machen. Wenns etwas zu veröffentlichen gibt, so werden ihr das schon mitbekommen :-)

In diesem Sinne wünsche ich euch viel Spass am neuen Forum!

mfG Gü

Thema: Suche nach Bibliothek für automatische Updates einer .Net 5 Anwendung
Am im Forum: Rund um die Programmierung

Hallo,

ohne genaueres von deiner Anwendung zu wissen: ClickOnce wird für .NET 5 unterstützt. Das wäre eine einfache Option.

mfG Gü

Thema: Best Practice Frage zu Exception Handling ASP.NET
Am im Forum: Grundlagen von C#

Hallo degri2006,

Zitat
Ich würde nur die Exceptions catchen
fange nur die Exception die auch behandelt werden können bzw. dessen Behandlung sinnvoll ist.
"Behandeln" ist z.B. Loggen, dem Benutzer zeigen dass etwas nicht passt um es erneut zu versuchen, usw.

Irgendwo in der Anwendung (du schreibst nicht ob es eine Client- / Server-Anwendung ist) sollte allerdings ein "catch all"


try
{
    // Anwendungs-Startpunkt bei Client, z.B. in Main-Methode
}
catch (Exeception ex)
{
    // Loggen, etc.
}
durchgeführt werden, damit es keinen unbehandelten Fehler (unhandled exception) gibt, welche den Prozess terminieren würde.
(Achte auch bei Threads / Tasks darauf dass die nicht unbehandelt bleiben).



mfG Gü

Thema: BinärDatei lesen mit festen Positionen und einem Start-"SuchText"
Am im Forum: Rund um die Programmierung

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ü

Thema: BinärDatei lesen mit festen Positionen und einem Start-"SuchText"
Am im Forum: Rund um die Programmierung

Hallo Torni,

Zitat
Der Typ der Datei Testdat.dat kann nicht hochgeladen werden.
Z.B. als zip sollte gehen od. umbenennen in Testdat.txt.
Probier das einmal, dann zeig ich ein Demo wie es mit Span und Freu(n)de geht.

mfG Gü

Thema: BinärDatei lesen mit festen Positionen und einem Start-"SuchText"
Am im Forum: Rund um die Programmierung

Hallo Torni,

Zitat
also der Suchtext steht als Plain-Text drin.
Als UTF-8 od. wie? Häng am besten so eine Beispiel-Datei an.
Wenns so ist wie ich mir vorstelle, dann lässt sich das elegant lösen -- aber bevor ich ein Demo zeige (da es doch nicht so gebräuchliche APIs sind) will ich gerne sehen wie es konkret ist, nicht dass ich was mache das den Punkt nicht trifft.

Außerdem hab ich oben noch mehr Fragen gestellt. Du willst Hilfe, also bitte ermögliche es den Helfern auch helfen zu können indem du die Fragen beantwortest.

mfG Gü

Thema: BinärDatei lesen mit festen Positionen und einem Start-"SuchText"
Am im Forum: Rund um die Programmierung

Hallo Torni,

Zitat
der Suchtext "blabla"
Steht der Suchtext als Text od. auch binär in der Datei?
Zitat
und nach diesem an Position z.B. +540 Zeichen steht das was ich auslesen muss..
Ist der Offset (hier die +540) gegeben od. wie werden diese ermittelt?
Das was du auslesen musst ist was? Ein struct od. etwas protokollbasiertes das geparst werden muss?

Ich frag deshabl, da es mit Span und MemoryMarshal ein paar sehr gute APIs für solche Fälle gibt.
Je nach Größe der Datei (wie groß ist die?) gibt es ev. mit dem SequenceReader eine weitere Alternative um das elegant und performant lesen zu können.

Aber bevor wir uns ev. in etwas verrennen beantworte bitte diese Fragen.
Am besten wäre wenn du ein Beispiel zeigen könntest wie die Datei ausschaut und was das Ergebnis sein soll.

mfG Gü

Thema: Float / Double / Decimal
Am im Forum: Grundlagen von C#

Hallo Crussy,

float und double sind Gleitkommazahlen, die nach IEEE 754 gespeichert werden.
float wird mit 32-bit gespeichert, während double mit 64-bit gespeichert wird, daher auch das "double" für "doppelte Genauigkeit". Da geht es v.a. darum wie die Zahlen und Ergebnisse gerundet werden. Somit können bei float 7-8 Dezimalstellen ohne Genauigkeitsverlust gespeichert werden, bei double sind es schon 15-16.

Der [FAQ] Double und Float: Fehler beim Vergleich und Rundungsfehler geht auf ein paar Eigenheiten dieser Gleitkommazahlen ein.

Wie erwähnt wird bei Operationen mit Gleitkommazahlen das "wahre Ergebnis" gerundet und somit ergeben sich zwangsläufig Rundungsfehler. Für viele Algorithmen spielen diese keine wesentliche Rolle, z.B. in der Thermodynamik ist es egal ob die Temperatur 273,1500001 K od. 273,1500002 K ist. Einen weiteren Ausflug in die Stabilität (Numerik) erspare ich dir hier ;-)

Stell dir nun aber vor es geht um Bank-Geschäfte und bei jeder Transaktion würde ein Rundungsfehler passieren. Nach unzähligen solcher Transaktionen und einer bestimmten Zeit könnten die Rundungsfehler so groß werden, dass die Bilanzen nicht mehr stimmen und das spielt eine wesentliche Rolle. Daher ist sind die o.g. Gleitkommazahlen ungeeignet und deshalb wurde der Datentyp decimal erfunden. Dieser besitzt keine Rundungsfehler und ist somit für Finanz-Mathematik die geieignete Wahl. Allerdings ist das Rechnen mit decimal aufgrund der Genauigkeitsanforderungen und des Wert-Bereichs nicht so performant wie mit den Gleitkomma-Typen double / float und tw. auch nicht anwendbar (da der Wert-Bereich über-/unterschritten wird).

Zusammengefasst:
Finanzmathematik -> decimal
Sonst -> double, außer Anforderungen an die Genauigkeit sind nicht sehr hoch dass float.

Was jedoch "nicht sehr hoch" bedeutet ist von Aufgabe zu Aufgabe verschieden, aber siehe oben bei den Dezimalstellen.

mfG Gü