Laden...

Byte Array

Erstellt von Irina vor 2 Jahren Letzter Beitrag vor 2 Jahren 643 Views
I
Irina Themenstarter:in
20 Beiträge seit 2021
vor 2 Jahren
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

J
251 Beiträge seit 2012
vor 2 Jahren

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.

2.079 Beiträge seit 2012
vor 2 Jahren

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.

I
Irina Themenstarter:in
20 Beiträge seit 2021
vor 2 Jahren

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

2.079 Beiträge seit 2012
vor 2 Jahren

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.

U
69 Beiträge seit 2019
vor 2 Jahren

Hier hatte anscheinend jemand das gleiche Problem.

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

  • Patrick to Spongebob
P
57 Beiträge seit 2017
vor 2 Jahren

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....

I
Irina Themenstarter:in
20 Beiträge seit 2021
vor 2 Jahren

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

U
69 Beiträge seit 2019
vor 2 Jahren


>
hatte anscheinend jemand das gleiche Problem.

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

  • Patrick to Spongebob
T
73 Beiträge seit 2004
vor 2 Jahren

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}");