ASCII Art in der Konsole ausgeben [C#]?
Guten Abend! Ich versuche seit einigen Tagen ein byte array in der Konsole auszugeben, was dann später "C#" als kleines Artwork in der Konsole ausgegeben wird. Ich weiß aber nicht, wie ich
a) mein Ganzes byte Array ausgeben lasse (er gibt nicht das vollständige array in der Konsole aus warum auch immer) und:
b) wie ich die Zahlen im array zu Zeichen zuweisen kann (sprich Leerzeichen, C und #) damit es das C# "artwork" in der cmd zeigt.
Wo liegen meine Fehler? Wenn möglich bitte mit Beispielen.
using System;
using System.IO;
namespace ESA_2
{
class Program
{
public void ESAIn(string Path)
{
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 };
//Anhand der ASCII Code Tabelle lassen sich 32 zu Leerzeichen, 67 zu C
// und die 35 zu # Zeichen Übersetzen, was, wenn wir die Ausgabe
//umstrukturieren, eine 'C#' in der Konsole ausgibt
FileStream stream = File.Open(Path, FileMode.Truncate, FileAccess.ReadWrite);
stream.Write(array, 0, array.Length);
stream.Close();
}
public void ESAOut(string Path)
{
BinaryReader reader = new BinaryReader(File.Open(Path, FileMode.Open));
var count = 0;
for (int i = 0; i < reader.ReadByte(); i++)
{
count++;
Console.Write("{0} ", reader.ReadByte());
if (count == 11)
{
Console.Write("\n");
count = 0;
}
}
reader.Close();
Console.WriteLine();
}
static void Main(string[] args)
{
string Path = @"C:\Users\Dean Aleksander\source\repos\ESA_2\ESA_2\ESA02.txt"; ;
Program test = new Program();
test.ESAIn(Path);
test.ESAOut(Path);
Console.ReadLine();
}
}
}
Die Aufgabenstellung: "Schreiben Sie eine Methode „ESA2In“ in einem neuen Projekt „ESA_2“, mit der dieses Array in eine in Ihrem Projektmappenordner anzulegende Datei „ESA2.txt“ gespeichert werden kann. Schreiben Sie sodann eine weitere Methode „ESA2Out“, mit der dieses Array aus der Datei ausgelesen und auf Konsole ausgegeben werden kann. Die Konsolenausgabe soll in sieben Zeilen mit jeweils elf Zeichen gegliedert werden – dies entspricht auch der vorstehenden Anordnung der Array-Elemente. Beachten Sie aber, dass eine Zeile im Array aus 33 Zeichen besteht – Ihre Konsolenausgabe soll hingegen elf Zeichen umfassen. "
1 Antwort
- Deine Schleife ergibt nicht viel Sinn und du gibtst noch dazu nur jedes zweite Byte aus.
- Bei der Ausgabe rufst du implizit byte.ToString() auf, was auch nicht zielführend ist.
Ersetze deine Schleife hierdurch, dann sollte es funktionieren:
int b; //Zum Zwischenspeichern des eingelesenen Wertes
while((b = reader.ReadByte()) > -1){ //Wert einlesen, zwischenspeichern und sofern der Wert größer als -1 ist die Schleife betreten
Console.Write((char)b); //Den eingelesenen Wert nach char casten und ausgeben
if(count > 0 && (++count % 11) == 0) Console.WriteLine(); //Falls count größer als 0 und nach dem Inkrementieren ohne Rest durch 11 teilbar ist einen Zeilenumbruch ausgeben
}
P.S.: Falls der Reader EOF erreicht gibt seine ReadByte-Methode -1 zurück.