Announcement

Collapse
No announcement yet.

String ab Leerzeile in zwei Teile teilen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • String ab Leerzeile in zwei Teile teilen

    Hallo,
    ich bin auf der Suche nach der Möglichkeit, einen String, den ich aus einer Textdatei eingelesen habe, nach einer Leerzeile (wahlweise auch erst nach der zweiten) in zwei neue Teilstrings zu teilen.

    Ich habe es im Ansatz mit
    Code:
    int i = readText.IndexOf("\n\n");
    versucht, bekomme allerdings das Ergebnis, mit dem ich dann eigentlich weiter arbeiten wollte,
    Code:
    -1
    .

  • #2
    Hallo,

    schau dir das Beispiel an und nimm heraus was du brauchst.

    Code:
    using System.IO;
    using System.Linq;
    
    namespace ConsoleApplication1
    {
    	class Program
    	{
    		static void Main(string[] args)
    		{
    			string text = File.ReadAllText("Test.txt");
    			string[] zeilen1 = text.Split(new char[] { '\n' });
    
    			string[] zeilen2 = File.ReadAllLines("Test.txt");
    
    			string[] zeilen3 = LiesZeilen("Test.txt");
    		}
    
    		public static string[] LiesZeilen(string dateiName)
    		{
    			string[] zeilen = File.ReadAllLines(dateiName);
    
    			return (from z in zeilen
    					where z.Length > 0
    					select z)
    					.ToArray();
    		}
    	}
    }
    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Danke.
      Das wäre schon mal ein Ansatz. Allerdings möchte ich die Datei lieber mit File.ReadAllText in einen String (kein Array) einlesen und diesen String dann z.B. mit Substring in zwei neue Strings (keine Arrys) teilen.

      Comment


      • #4
        Dann könntest du auch das verwenden:
        Code:
        string text = File.ReadAllText("Test.txt");
        string[] zeilen = text.Split(new char[] { '\n' }, 2);
        string zeile1 = zeilen[0];
        string zeile2 = zeilen[1];
        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          So weit, so klar, allerdings will ich ja nicht bei \n trennen sondern bei \n\n.

          Geht das vielleicht irgendwie mit Regulären Ausdrücken?

          Comment


          • #6
            allerdings will ich ja nicht bei \n trennen sondern bei \n\n.
            Dann schau in der MSDN nach welche Überladungen die Split-Methode bietet. Dort findest dann das was zu
            Code:
            string text = File.ReadAllText("T.txt");
            string[] zeilen =
            	text.Split(
            		new string[] { "\r\n\r\n" },
            		StringSplitOptions.RemoveEmptyEntries);
            führt. Durch kurzen Test siehst du dann auch dass \r\n eine neue Zeile ist (bei mir zumindest, so wie Windows-Standard). Würde die Text-Datei aber mittels Code erstellt ist dort i.A. nur \n verwendet worden -> anpassen des Strings in Split.

            Geht das vielleicht irgendwie mit Regulären Ausdrücken?
            Ja geht. Aber wenn du das mit Regex implementierst und noch dazu eine Methode draus machst hast du dir deine eigene Implementierung der Split-Methode gebaut. D.h. Split arbeit intern (höchstwahrscheinlich) auch mit Regex.

            mfG Gü
            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

            Comment


            • #7
              Als Ergänzung zu Gü's Hinweisen:

              Die Suche nach "\n\n" führt zumindest in der Theorie (mit 99%-Sicherheit auch in der Praxis) in die Irre. Ein Zeilenende wird wahlweise durch "\n" oder "\n\r" oder "\r\n" (= Environment.NewLine unter Windows) gekennzeichnet. Auch unter Windows benutzen manche Programme nicht Environment.NewLine, sondern eine der anderen Varianten.

              Du kommst also nicht darum herum, zuerst alle Zeilenenden als Trenner auszuwerten und dann (oder im gleichen Schritt, siehe String.Split-Überladung) die Leerzeilen rauszuschmeißen. Jürgen

              Comment

              Working...
              X