Index von Array finden anhand von String

  • C#
  • .NET (FX) 4.0

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    Index von Array finden anhand von String

    Hallo,
    ich versuche einen Index im Array zu finden anhand von einem String.

    C#-Quellcode

    1. string[] lines = File.ReadAllLines(assemblyLocation+"\\config.txt");
    2. int zeile = Array.BinarySearch(lines, "arm_freq=1050");


    Leider wird in der Variable "zeile" immer der falsche Index gespeichert und zudem auch noch ein Negativer (siehe Anhang).

    Ich finde einfach nicht den Fehler und wieso der Index auch noch negativ ist.
    Bilder
    • Unbenannt.png

      7 kB, 553×67, 160 mal angesehen

    King2k7 schrieb:

    den Fehler
    Mach es so:

    C#-Quellcode

    1. List<string> ll = System.IO.File.ReadAllLines(@"C:\Temp\Test.txt").ToList<string>();
    2. int i = ll.IndexOf("33");
    Spoiler anzeigen
    00
    11
    22
    33
    44
    55
    66
    77
    88
    99
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    King2k7 schrieb:

    nach "arm_freq=" suchen lasse
    musst Du alle Items mit .StartsWith(DEIN_STRING) durchklickern.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    hmm - da hast du's wohl nur teilweise richtig verstanden.
    Weil bei BinarySearch bedeuten negative Rückgabewerte nicht unbedingt einen "Fehlschlag". Sondern sie geben dann immerhin - etwas verschlüsselt - die EinfügePostition an, also wo das gesuchte Element einzufügen wäre, wollte man es einfügen.

    Für deine händische Such-Lösung gibts übrigens auch was inne Array-Klasse: FindIndex(predicate) - gucks dir mal im ObjectBrowser an - ein Einzeiler.
    Hi
    wenn die Datei allgemeine Werte bereithält, wie arm_freq, wäre es vielleicht auch eine Idee, das zeilenweise durchzugehen und alle Zuordnungen (über String.Split trennen, über String.Trim die Bezeichnungen herausfinden) in ein Dictionary einzuspeichern: System.Collections.Generic.Dictionary(Of TKey, TValue).

    C#-Quellcode

    1. var dtc = new Dictionary<string, string>();
    2. string[] input = File.ReadAllLines(bla);
    3. foreach(string s in input)
    4. {
    5. string[] p = s.Split(new char[]{'='}, 1, StringSplitOptions.None);
    6. if (p.Length == 1) // was soll passieren, wenn ein Eintrag ohne '=' vorhanden ist?
    7. {
    8. if (string.IsNullOrWhitespace(p[0]))
    9. continue;
    10. else
    11. throw new InvalidOperationException("Invalid assignment detected in submitted content.");
    12. }
    13. else
    14. {
    15. dtc.Add(p[0].Trim(), p[1].Trim());
    16. }
    17. }

    dtc sollte danach eigentlich alle Zuordnungen enthalten.



    Viele Grüße
    ~blaze~