Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Byte Array
Irina
myCSharp.de - Member



Dabei seit:
Beiträge: 20

Themenstarter:

Byte Array

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Jamikus
myCSharp.de - Member



Dabei seit:
Beiträge: 244
Herkunft: Oberhausen (NRW)

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Palladin007
myCSharp.de - Member

Avatar #avatar-4140.png


Dabei seit:
Beiträge: 1.760
Herkunft: Düsseldorf

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Palladin007 am .
private Nachricht | Beiträge des Benutzers
Irina
myCSharp.de - Member



Dabei seit:
Beiträge: 20

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Palladin007
myCSharp.de - Member

Avatar #avatar-4140.png


Dabei seit:
Beiträge: 1.760
Herkunft: Düsseldorf

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Urza
myCSharp.de - Member



Dabei seit:
Beiträge: 68

beantworten | zitieren | melden

Hier hatte anscheinend jemand das gleiche Problem.
“Knowledge cannot replace friendship. I'd rather be an idiot than lose you.”

- Patrick to Spongebob
private Nachricht | Beiträge des Benutzers
Platoon
myCSharp.de - Member



Dabei seit:
Beiträge: 54
Herkunft: NRW

beantworten | zitieren | melden

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....
private Nachricht | Beiträge des Benutzers
Irina
myCSharp.de - Member



Dabei seit:
Beiträge: 20

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Urza
myCSharp.de - Member



Dabei seit:
Beiträge: 68

beantworten | zitieren | melden

Zitat von Urza
Hier hatte anscheinend jemand das gleiche Problem.
“Knowledge cannot replace friendship. I'd rather be an idiot than lose you.”

- Patrick to Spongebob
private Nachricht | Beiträge des Benutzers
tomschrot
myCSharp.de - Member



Dabei seit:
Beiträge: 66
Herkunft: Herrsching a. A.

beantworten | zitieren | melden

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}");
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von tomschrot am .
private Nachricht | Beiträge des Benutzers