| Autor |
Beitrag |
Susilein
Hält's aus hier
Beiträge: 10
xp
c#
|
Verfasst: Mi 15.04.09 19:54
Hallo,
ich bin Anfängerin und habe in einer Konsolenanwengung ein byte []array mit 77 objekten programminert.
zb : byte[] content = { 1, 2, 3, 4 , usw..};
Ich habe nur noch ein Problem
ich wollte die arrays in eine txt einlesen und diese auf konsole wieder ausgeben.
das funktioniert schon nur bekomme ich keinen gruppierten zeilenumbruch als AUsgabe hin zb so:
12345678
910111213
usw.
kann mir jemand helfen?
lg susanne
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Mi 15.04.09 20:31
Also entweder ist "gruppierter Zeilenumbruch" kein anerkannter Fachbegriff oder ich habe was verpasst  . Sollen in jede Zeile jeweils acht Zahlen? Dann brauchst du auf jeden Fall zwei verschachtelte Schleifen (ein mehrdimensionales Array eher nicht  ) und musst dir überlegen, mit welcher mathematischen Formel du in der inneren den richtigen Index errechnen kannst.
_________________ >λ=
|
|
Susilein 
Hält's aus hier
Beiträge: 10
xp
c#
|
Verfasst: Mi 15.04.09 20:53
Hallo und danke für die Antwort.
also benötige ich kein mehrdimensionales array ?
Ich will ein byte[] array:
in eine Datei schreiben und wieder auslesen:
das Funktioniert ja alles schon einwandfrei nur leider weiss ich nicht wie ich zb nach jedem 8. array einen Zeilenumbruch erzwinge.
hier ist der code
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42:
| using System; using System.Collections.Generic; using System.Text; using System.IO;
namespace ESA { class Program {
public void ESA3In(string pfad, byte[] array) { FileStream stream1 = File.Open(pfad, FileMode.Create); stream1.Write(array, 0, array.Length); stream1.Close();
} public void ESA3Out(string pfad) { FileStream stream2 = File.Open(pfad, FileMode.Open); byte[] array = new byte[stream2.Length]; stream2.Read(array, 0, (int)stream2.Length); for (int i = 0; i < array.Length; i++) { Console.Write( array[i]); } Console.WriteLine(); stream2.Close(); } static void Main(string[] args) { Program test = new Program(); string pfad = @"C:\Musterneu.txt"; byte[] content = { 1, 2, 3, 4,5,6,7,8,9, 10,11,12,13,14,15,16,17,18, 19,20,21,22,23,24,25,26,27};
test.ESA3In(pfad, content); test.ESA3Out(pfad); |
Moderiert von Christian S.: Beiträge zusammengefasst
Die ausgabe auf console soll dann so aussehen:
1,2,3,4,5,6,7,8,9,
10,11,12,13,14,15,16,17,18,
19,20,21,22,23,24,25,26,27
Moderiert von Christian S.: C#-Tags hinzugefügt
|
|
CSharper2
Hält's aus hier
Beiträge: 6
|
Verfasst: So 19.04.09 15:26
hi susilein,
so wie ich das jetzt erkenne, soll nach jedem 9. indexer in deinem array ein zeilenumbruch erfolgen?!?! richtig?
wenn dem so ist, dann lasse doch einfach in deiner for-schleife einen counter mitlaufen.
diesen zählst du hoch. wenn du alle 9 elemente hast, machst du n zeilenumbruch und setzt ihn zurück:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| public void ESA3Out(string pfad) { int counter = 1; FileStream stream2 = File.Open(pfad, FileMode.Open); byte[] array = new byte[stream2.Length]; stream2.Read(array, 0, (int)stream2.Length); for (int i = 0; i < array.Length; i++) { if (counter == 10) { Console.Write("Zeilenumbruch"); counter = 1; } else { Console.Write( array[i]); counter += 1; } } Console.WriteLine(); stream2.Close(); } |
|
|
JüTho
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: Di 21.04.09 12:23
Hallo,
nach einem Kurzurlaub habe ich mir noch die letzten Probleme durchgelesen. Hierzu wollte ich noch meinen Senf dazugeben:
Das Einfachste ist sicherlich die zweite Variable, aber es gibt doch auch die mod-Anweisung:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| public void ESA3Out(string pfad) { FileStream stream2 = File.Open(pfad, FileMode.Open); byte[] array = new byte[stream2.Length]; stream2.Read(array, 0, (int)stream2.Length); for (int i = 0; i < array.Length; i++) { Console.Write( array[i].ToString() + "," ); if (i % 9 == 8) { Console.Write( Environment.NewLine ); } } Console.WriteLine(); stream2.Close(); } |
Nicht wundern über "module gleich 8": Der Laufindex fängt bei 0 an, also muss die neue Zeile ein Element vor "gleich 0" kommen.
@CSharper2
Man kann natürlich if-else verwenden. Dann ist es aber einfacher, zwischen Write(array[i]) und WriteLine(array[i]) zu unterscheiden, und überlässt den richtigen Zeilenvorschub dem Framework.
@Susilein
Bitte formuliere deine Beiträge etwas sorgfältiger.
| Zitat: | | Ich will ein byte[] array... nur leider weiss ich nicht wie ich zb nach jedem 8. array einen Zeilenumbruch erzwinge. |
Nach deinem Beispiel willst nach jeweils neun Zahlen einen Zeilenumbruch eingeben, nicht nach 8. Dabei handelt es sich um Array-Elemente, aber nicht um ganze Arrays. Selbst wenn du ein zweidimensionales Array verwenden würdest (was in der Tat nicht erforderlich ist), würde die neue Zeile nach jedem einzelnen Array der einen Ebene kommen.
Gruß Jürgen
|
|
|