Readline und \n



  • Kann man irgendwie StreamReader.ReadLine dazu zwingen, nur EINE Kodierung für das Ende der Zeile zu akzeptieren?



  • Denk dran in C# arbeitest Du mit Unicode

    \n entspricht hier 2 Byte und man verwendet "\n\r"

    fuer das Zeilenende

    Wenn ich Dich jetzt nicht falsch verstanden haben sollte!



  • sclearscreen schrieb:

    Denk dran in C# arbeitest Du mit Unicode

    \n entspricht hier 2 Byte und man verwendet "\n\r"

    Ne, eben nicht. Das ist ja das Schlimme. (BTW, \n\r ist MS, nicht Unicode). ReadLine springt bei jeder Art von Zeilenumbruch an, '\n', '\r' und "\n\r", ich will aber, dass es die ersten beiden auslässt.



  • hmm Du liest ja bestimmt Durch das readline in eine Variable.

    zähl halt mit bei den "\r\n" in eine Variable und ignoriere alle "\n\r" bei <2

    meine ich dazu



  • Probier es doch aus! Readline nimmt alles als Zeilenumbruch an, da bleibt nichts im String über. Das ist genau das, worauf ich hinauswill. Ich möchte, dass Readline nur bei dem Windowszeilenumbruch eine neue Zeile annimmt und das einfache \n im String lässt.



  • jo hatte ich nicht drangedacht das man die Umbrüche durch ReadLine nichtreinbekommt! Sorry aber ich stand noch nicht vor dem Problem in C#.

    Aber habe Dir hier mal ein Beispiel gemacht wo Du Byte für Byte lesen kannst,
    was besagte Zeilenumbrüche mitzählt.

    using System;
    using System.IO;
    
    namespace Zeilenumbruch
    {
    	class Class1
    	{
    		[STAThread]
    		static void Main(string[] args)
    		{
    			try
    			{
    				FileStream fileStream = new FileStream("c:\\test.txt",FileMode.Open);
    
    				int zeilenumbrüche = 0;
    				byte [] buffer = new byte[1];
    				char sign;
    				while(fileStream.Read(buffer,0,1) > 0)
    				{
    					sign = (char) buffer[0];	
    					if(sign == '\n')
    						zeilenumbrüche++;
    
    				}
    
    				fileStream.Close();
    				Console.WriteLine(zeilenumbrüche);
    				Console.ReadLine();
    			}
    			catch(System.Exception ex)
    			{
    				Console.WriteLine(ex.Message);
    			}
    		}
    	}
    }
    

    brauchst ja nur hinter dem Konstrukt

    if(sign == '\n')
    						zeilenumbrüche++;
    

    noch ein IF reinklemmen was bei 2 Zeilenumbrüchen die Schleife verlässt dann
    stehst Du genau an der Position hinter den 2 ersten '\n'

    teste das bitte mal an das sollte Dir dann helfen.
    Man muss halt Zeichenweise auslesen entschuldigung das ich nicht gleich daran gedacht hatte.



  • War mir im nachhinein auch klar das ReadLine "Whitespaces" ala "\n\r" nicht mit ausgibt ----> deshalb eben Zeichenweise lesen der Datei bis ich 2 Umbrüche finde.



  • Bah, da kann ich ja direkt C schreiben. Naja, ich hatte mir schon sowas gedacht, trotzdem danke.


Anmelden zum Antworten