none
Strings zwischen speziellen Steuerzeichen in getrennte Listen einfügen RRS feed

  • Frage

  • Hallo,
    ich habe folgenden String:

    string test = "Ein Beispieltext i/ zum Zeigen /i wie die Steuerzeichen vom Anwender f/ Krause, Michael /f genutzt werden um das i/ f/ Ziel der Anwendung /f /i zeigen zu können.\r\n
    Heute am /i f/ Montag /f /i scheint die Sonne i/ nicht /i den ganzen f/ Tag /f."

    Der String enthält spezielle Steuerzeichen (i/ und /i, f/ und /f), welche auch hintereinander vorkommen können.
    Jetzt brauche ich in zwei verschiedene Listen.
    Erste Liste mit den Strings zwischen i/ und /i. Zweite Liste mit den Strings zwischen f/ und /f.

    List<string> valueI:
    zum Zeigen
    Ziel der Anwendung
    Montag
    nicht

    List<string> valueF:
    Krause, Michael
    Ziel der Anwendung
    Montag
    Tag

    Hat jemand eine Lösung wie ich die beiden Listen erstellen kann?
    Kann man diese mit RegEx erstellen und wenn ja wie?

    Dienstag, 29. Oktober 2019 16:37

Antworten

  • Also ich würde es wohl so machen:

        static void Test2()
        {
          // Vor Montag ein öffnendes i/.
          string str = "Ein Beispieltext i/ zum Zeigen /i wie die Steuerzeichen vom Anwender f/ Krause, "
                          + "Michael /f genutzt werden um das i/ f/ Ziel der Anwendung /f /i zeigen zu können.\r\n"
                          + "Heute am i/ f/ Montag /f /i scheint die Sonne i/ nicht /i den ganzen f/ Tag /f.";
    
          String[] valueI;
          String[] valueF;
    
          if (str.Contains("i/"))
          {
            valueI = str.Substring(str.IndexOf("i/")).Split("i/", StringSplitOptions.RemoveEmptyEntries);
    
            for (int i = 0; i < valueI.Length; i++)
            {
              if (valueI[i].Contains("/i"))
              { valueI[i] = valueI[i].Substring(0, valueI[i].IndexOf("/i")); }
    
              valueI[i] = valueI[i].Replace("f/", "");
              valueI[i] = valueI[i].Replace("/f", "");
              valueI[i] = valueI[i].Trim();
            }
          }
    
          if (str.Contains("f/"))
          {
            valueF = str.Substring(str.IndexOf("f/")).Split("f/", StringSplitOptions.RemoveEmptyEntries);
    
            for (int i = 0; i < valueF.Length; i++)
            {
              if (valueF[i].Contains("/f"))
              { valueF[i] = valueF[i].Substring(0, valueF[i].IndexOf("/f")); }
              
              valueF[i] = valueF[i].Replace("i/", "");
              valueF[i] = valueF[i].Replace("/i", "");
              valueF[i] = valueF[i].Trim();
            }
          }
    
        }
    
    
    

    Donnerstag, 31. Oktober 2019 09:41
  • Hallo AlexanderRi,

    da du noch keinen eigenen Ansatz gezeigt hast, möchte ich nur auf ein paar allgemeine Dinge hinweisen, dafür auch die beiden folgenden Test-Zeichenketten:

    var test1 = "/f Hallo f/ i/ Welt, f/ da i/ draußen /f können Fehler /i vorkommen/i\r\n"; 
    var test2 = "Als Instrument kommt eine Schalmei/Flöte in Frage";

    Wenn du diese Anforderung bearbeiten willst und eine Routine dafür programmieren willst, solltest du dir vorher ein paar Fragen beantworten:

    1. Setzt du voraus, dass der "Input" syntaktisch korrekt ist, der Input also valide ist?

    2. Falls der Input geprüft werden sollte (sollte eigentlich immer der Fall sein), welche Regeln gelten für eine "korrekte" Syntax, welche Definitionen liegen vor? Gibt es Lücken dabei?

    3. Dürfen die "Trennzeichen" geschachtelt werden?
    4. Wie erkennst du die Trennzeichen? Ist " i/ " gleich "i/ " oder gleich " i/" oder "i/"? Ist "F/" gleich "f/"?
    5. Welche Fehler können theoretisch vorkommen? Welche Fehler sollen oder können automatisiert behoben werden?
    Muss z.B. ein einleitendes " i/ " auch ein abschließendes " /i " haben?
    6. Ist die Syntaxprüfung "lax" oder "streng", sollte es dafür einen Switch geben?
    7. Ist die Liste der "Trennzeichen" final oder können weitere dazukommen? Ist der geplante Algorithmus also spezifisch für die beiden gezeigten Trennzeichen-Paare oder soll er später vielleicht auch mit 3, 4, ... n Trennzeichen-Paaren umgehen können?



    Freitag, 1. November 2019 11:38

Alle Antworten

  • Was hast Du bisher versucht?
    Warum hat es nicht funktioniert?

    Das Forum ist nicht da um deine Hausaufgaben zu lösen.


    - Gruß Florian

    Mittwoch, 30. Oktober 2019 08:26
  • Also ich würde es wohl so machen:

        static void Test2()
        {
          // Vor Montag ein öffnendes i/.
          string str = "Ein Beispieltext i/ zum Zeigen /i wie die Steuerzeichen vom Anwender f/ Krause, "
                          + "Michael /f genutzt werden um das i/ f/ Ziel der Anwendung /f /i zeigen zu können.\r\n"
                          + "Heute am i/ f/ Montag /f /i scheint die Sonne i/ nicht /i den ganzen f/ Tag /f.";
    
          String[] valueI;
          String[] valueF;
    
          if (str.Contains("i/"))
          {
            valueI = str.Substring(str.IndexOf("i/")).Split("i/", StringSplitOptions.RemoveEmptyEntries);
    
            for (int i = 0; i < valueI.Length; i++)
            {
              if (valueI[i].Contains("/i"))
              { valueI[i] = valueI[i].Substring(0, valueI[i].IndexOf("/i")); }
    
              valueI[i] = valueI[i].Replace("f/", "");
              valueI[i] = valueI[i].Replace("/f", "");
              valueI[i] = valueI[i].Trim();
            }
          }
    
          if (str.Contains("f/"))
          {
            valueF = str.Substring(str.IndexOf("f/")).Split("f/", StringSplitOptions.RemoveEmptyEntries);
    
            for (int i = 0; i < valueF.Length; i++)
            {
              if (valueF[i].Contains("/f"))
              { valueF[i] = valueF[i].Substring(0, valueF[i].IndexOf("/f")); }
              
              valueF[i] = valueF[i].Replace("i/", "");
              valueF[i] = valueF[i].Replace("/i", "");
              valueF[i] = valueF[i].Trim();
            }
          }
    
        }
    
    
    

    Donnerstag, 31. Oktober 2019 09:41
  • Hallo AlexanderRi,

    da du noch keinen eigenen Ansatz gezeigt hast, möchte ich nur auf ein paar allgemeine Dinge hinweisen, dafür auch die beiden folgenden Test-Zeichenketten:

    var test1 = "/f Hallo f/ i/ Welt, f/ da i/ draußen /f können Fehler /i vorkommen/i\r\n"; 
    var test2 = "Als Instrument kommt eine Schalmei/Flöte in Frage";

    Wenn du diese Anforderung bearbeiten willst und eine Routine dafür programmieren willst, solltest du dir vorher ein paar Fragen beantworten:

    1. Setzt du voraus, dass der "Input" syntaktisch korrekt ist, der Input also valide ist?

    2. Falls der Input geprüft werden sollte (sollte eigentlich immer der Fall sein), welche Regeln gelten für eine "korrekte" Syntax, welche Definitionen liegen vor? Gibt es Lücken dabei?

    3. Dürfen die "Trennzeichen" geschachtelt werden?
    4. Wie erkennst du die Trennzeichen? Ist " i/ " gleich "i/ " oder gleich " i/" oder "i/"? Ist "F/" gleich "f/"?
    5. Welche Fehler können theoretisch vorkommen? Welche Fehler sollen oder können automatisiert behoben werden?
    Muss z.B. ein einleitendes " i/ " auch ein abschließendes " /i " haben?
    6. Ist die Syntaxprüfung "lax" oder "streng", sollte es dafür einen Switch geben?
    7. Ist die Liste der "Trennzeichen" final oder können weitere dazukommen? Ist der geplante Algorithmus also spezifisch für die beiden gezeigten Trennzeichen-Paare oder soll er später vielleicht auch mit 3, 4, ... n Trennzeichen-Paaren umgehen können?



    Freitag, 1. November 2019 11:38