Laden...

Byte Array

Letzter Beitrag vor 2 Jahren 10 Posts 677 Views
Byte Array

Guten Morgen zusammen,

nochmal zu meinem Byte-Array...
Soweit klappt jetzt alles super, es gibt keine Fehlermeldungen mehr.....
Die Konsolenausgabe und das Schreiben in die Datei mit den entsprechenden Zeichen funktioniert auch....
Der Code wird mir aber nur in einer Reihe angezeigt, anstatt mit einer Splittung in 7 Reihen....
Irgendwo ist also ein kleiner Denkfehler....

Hier mein geschriebener Code:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace ESAAufgabe2
{
    class Program
    {
        public void ESA2IN(string pfad, byte[] array)
        {
            FileStream stream = File.Open(pfad, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Write);
            stream.Write(array, 0, array.Length);
            stream.Close();
        }

        public void ESA2Out(string pfad)
        {
            FileStream stream = File.Open(pfad, FileMode.Open, FileAccess.Read, FileShare.Read);
            byte[] array = new byte[stream.Length];
            stream.Read(array, 0, (int)stream.Length);

            for (int i = 0; i < array.Length; i++)
            {
                Console.Write((char)array[i]);
            }
            Console.WriteLine();
            stream.Close();
        }

        static void Main(string[] args)
        {
            Program test = new Program();
            string pfad = @"C:\Users\admin\source\repos\CSH-Lehrgang\CSH03\VS-Projekte\Buch CSH03\ESAAufgabe2\ESA2IN.txt";
            byte[] array = {32, 32, 67, 67, 32, 32, 32, 35, 32, 35, 32,
32, 67, 32, 32, 67, 32, 32, 35, 32, 35, 32,
67, 32, 32, 32, 32, 32, 35, 35, 35, 35, 35,
67, 32, 32, 32, 32, 32, 32, 35, 32, 35, 32,
67, 32, 32, 32, 32, 32, 35, 35, 35, 35, 35,
32, 67, 32, 32, 67, 32, 32, 35, 32, 35, 32,
32, 32, 67, 67, 32, 32, 32, 35, 32, 35, 32 };
            test.ESA2IN(pfad, array);
            test.ESA2Out(pfad);
        }
    }
}

Ich hoffe, das ihr mir weiterhelfen könnt...

LG Irina

Der Denkfehler ist der Aufbau/Struktur des Arrays.

Dein Array über 7 Zeilen zu initialisieren, splittet für dich nicht direkt die Ausgabe.
Somit fehlt bei der Ausgabe des Arrays noch die Information ab welcher Stelle der Zeilenumbruch stattfinden soll.

Ein Array ist nur eine Datenstruktur und kennt keine Formatierungen. Die Aufteilung im Code ist nur im Code, der Compiler liest das als eine Zeile.
Du schreibst in deiner for-Schleife jedes Item nacheinander, da ist nirgendwo ein Zeilenumbruch, also wird auch kein Zeilenumbruch angezeigt.

Entweder Du verwendest ein zweidimensionales Array
Oder Du fügst immer dann eine neue Zeile ein, wenn Du eine neue Zeile haben willst.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

Habe den Code etwas umgeschrieben.....
Da scheint aber noch etwas falsch zu sein....
Ich erhalte keine Fehlermeldung, aber bei der Konsolenausgabe habe ich nur ein schwarzes Bild....
Habe ein zweidimensionales Array erstellt byte[,] array = new byte[7, 11];, aber irgendwo steckt immer noch ein Denkfehler von mir....


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace ESAAufgabe2
{
    class Program
    {
        public void ESA2IN(string pfad, byte[] array)
        {
            FileStream stream = File.Open(pfad, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Write);
            stream.Write(array, 0, array.Length);
            stream.Close();
        }

        public void ESA2Out(string pfad)
        {
            FileStream stream = File.Open(pfad, FileMode.Open, FileAccess.Read, FileShare.Read);
            byte[,] array = new byte[7, 11];

            for (int i = 0; i < array.Length;)
            {
                Console.Write((char) i);
            }
            Console.WriteLine();
            stream.Close();
        }

        static void Main(string[] args)
        {
            Program test = new Program();
            string pfad = @"C:\Users\admin\source\repos\CSH-Lehrgang\CSH03\VS-Projekte\Buch CSH03\ESAAufgabe2\ESA2IN.txt";
            byte[] array = {32, 32, 67, 67, 32, 32, 32, 35, 32, 35, 32,
32, 67, 32, 32, 67, 32, 32, 35, 32, 35, 32,
67, 32, 32, 32, 32, 32, 35, 35, 35, 35, 35,
67, 32, 32, 32, 32, 32, 32, 35, 32, 35, 32,
67, 32, 32, 32, 32, 32, 35, 35, 35, 35, 35,
32, 67, 32, 32, 67, 32, 32, 35, 32, 35, 32,
32, 32, 67, 67, 32, 32, 32, 35, 32, 35, 32 };
            test.ESA2IN(pfad, array);
            test.ESA2Out(pfad);
        }
    }
}

LG Irina

Du erstellst ein zweidimensionales Array, füllst es aber nicht mit Daten und ignorierst beim Schreiben des Arrays in die Konsole, dass es zweidimensional ist.

Schau dir an, was ein zweidimensionales Array ist und wie man es benutzt, dann wird es sicher auch etwas klarer.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

Hier hatte anscheinend jemand das gleiche Problem.

“Knowledge cannot replace friendship. I'd rather be an idiot than lose you.”

  • Patrick to Spongebob

Und pack mal in die Main()....Methode noch ein System.ReadKey()

Dann wird es sich auch nicht schließen.....

.....an unhandled exception is the first way to think about your pattern of programming....
.....nur weil ich nicht weiß was dort passiert, bedeutet es nicht, dass ich nicht weiß, wie man es lösen kann - aber das ist wahrscheinlich....

Hallo zusammen,

bin immer noch mit dieser Aufgabe beschäftigt....
Die Zeichen werden alle richtig ausgegeben....
Fehlermeldungen erhalte ich keine.....
Irgendwie habe ich eine totale Blockade und weiß nicht weiter. Egal was ich mache, es funktioniert einfach nicht.
Habe es mit einer try-catch-Anweisung versucht, mit einer content-Anweisung, mit einer verschachtelten for-Schleife.....
Ich habe auch in der Dokumentation recherchiert....
Wie bekomme ich die 7 Zeilen vom Byte-Array untereinander??? Hat evtl. jemand ein Code-Beispiel für mich?

Mein Code sieht derzeit so aus:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace ESAAufgabe2
{
    class Program
    {
        public void ESA2IN(string pfad, byte[,] array)
        {
            FileStream stream = File.Open(pfad, FileMode.OpenOrCreate);
            for (int i = 0; i < 7; i++)
            {
                for (int j = 0; j < 11; j++)
                {
                    stream.WriteByte(array[i, j]);
                } 
            }
            stream.Close();
        }

        public void ESA2Out(string pfad)
        {
            StreamReader reader = new StreamReader(File.Open(pfad, FileMode.Open));
            int zeichen;
            while ((zeichen = reader.Read()) != -1)
            {
                Console.Write((char)zeichen);
            }
            Console.WriteLine();
            reader.Close();
        }

        static void Main(string[] args)
        {
            Program test = new Program();
            string pfad = @"C:\Users\admin\source\repos\CSH-Lehrgang\CSH03\VS-Projekte\Buch CSH03\ESAAufgabe2\ESA2.txt";
            byte[,] array = {{ 32, 32, 67, 67, 32, 32, 32, 35, 32, 35, 32 },
{ 32, 67, 32, 32, 67, 32, 32, 35, 32, 35, 32 },
{ 67, 32, 32, 32, 32, 32, 35, 35, 35, 35, 35 },
{ 67, 32, 32, 32, 32, 32, 32, 35, 32, 35, 32 },
{ 67, 32, 32, 32, 32, 32, 35, 35, 35, 35, 35 },
{ 32, 67, 32, 32, 67, 32, 32, 35, 32, 35, 32 },
{ 32, 32, 67, 67, 32, 32, 32, 35, 32, 35, 32 } };
            test.ESA2IN(pfad, array);
            test.ESA2Out(pfad);
        }
    }
}

LG Irina


>
hatte anscheinend jemand das gleiche Problem.

“Knowledge cannot replace friendship. I'd rather be an idiot than lose you.”

  • Patrick to Spongebob

Hi

kann das sein, dass diese Frage auf FB auch schon gestellt wurde?
Ich würde das so schreiben (.NET 6, C# 10):


using static System.Console;

const string DATAFILE =".\\my.data";

byte[] data =
{
    32, 32, 67, 67, 32, 32, 32, 35, 32, 35, 32,
    32, 67, 32, 32, 67, 32, 32, 35, 32, 35, 32,
    67, 32, 32, 32, 32, 32, 35, 35, 35, 35, 35,
    67, 32, 32, 32, 32, 32, 32, 35, 32, 35, 32,
    67, 32, 32, 32, 32, 32, 35, 35, 35, 35, 35,
    32, 67, 32, 32, 67, 32, 32, 35, 32, 35, 32,
    32, 32, 67, 67, 32, 32, 32, 35, 32, 35, 32
};

File.WriteAllBytes (DATAFILE, data);

var buf =   File.Exists (DATAFILE)
            ? File.ReadAllBytes (DATAFILE)
            : new byte[]{};

int count = 0;
foreach (var value in buf)
{
    Write ($"{value,2},");
    if (++count % 11 == 0) WriteLine ();
}

WriteLine ($"\r\nOK @ {DateTime.Now}");