Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

30.09.2012, 01:44

[C#] Streamwriter: Nach x Buchstaben soll ein Umbruch gemacht werden

Guten Abend,
Ich habe eine Frage zum Streamwriter.
Ich möchte nämlich einen Text haben der immer nach z.B. 10 Buchstaben einen Umbruch hat.

Der Text sieht so aus:
123456789101112131415

Ich möchte das er so aussieht:
1234567891
0111213141
5 usw.

Danke schon mal für euere Antworten


Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

30.09.2012, 01:54

Schreib doch immer einfach 10 Zeichen in den Stream und schreib danach einen Zeilenumbruch rein.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

3

30.09.2012, 02:06

Das geht leider nicht, da ich einen switch habe:

C#-Quelltext

1
2
3
4
5
6
7
8
9
 switch (Fields[x, y])
                        {
                            case FieldTypes.Bla:
                                objWriter.WriteLine('.');
                                break;
                            case FieldTypes.Bla:
                                objWriter.WriteLine('0');
                                break;
                        }


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

30.09.2012, 02:14

Und wo liegt jetzt genau das Problem? Woher kommen x und y?

Btw: Hab den Typo im Titel ausgebessert. ;)

5

30.09.2012, 02:15

Zähl 'nen Integer hoch.
Prüfe ob er Zahl X erreicht hat, füge dann einen Umbruch ein.
Sieht nach dem Codeschnipsel aus arg nach Schleife aus, da dürfte das wohl die einfachste Methode sein.

MfG
Check

6

30.09.2012, 12:49

Danke @ Checkmateing, es hat geklappt :)
Habe jetzt aber ein anderes Problem und zwar speichere ich eine Map vom Mapeditor, nur der speichert diese falsch und zwar so:

C#-Quelltext

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
0000000000000000
0.....0........0
0.....0........0
0...3..........0
0..............0
0.....0..0.....0
0.....0.0.0....0
00000000...0...0
0..........0...0
0..........0...0
0..........0...0
0..........0...0
0.......0..0...0
0.......0......0
0.......0......0
0...0...0......0
0...0..........0
0..000.........0
0....0.........0
0....0.........0
0....0.........0
0....0.2.......0
0..1.0.........0
0....0.........0
0000000000000000


Ich will es aber so haben:

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
0000000000000000000000000
0......0................0
0......0............1...0
0......0.........0......0
0..3...0.......000......0
0......0.........00000000
000..000................0
0......0............2...0
0.....0.....0000........0
0....0..................0
0.....0.................0
0......000000...........0
0.......................0
0.......................0
0.......................0
0000000000000000000000000


Bei mir sieht es so aus:

(FieldTypes ist ein enum)

C#-Quelltext

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
43
44
45
46
47
48
49
50
51
52
53
54
55
public FieldTypes[,] Fields { get; set; }

const int MapHeight = 16;
const int MapWidth = 25;

public void SaveMap(String fileName)
        {
            try
            {
                StreamWriter sw;
                sw = new StreamWriter(@fileName + ".txt");

                int i = 0;

                for (int x = 0; x < MapWidth; x++)
                {
                    for (int y = 0; y < MapHeight; y++)
                    {
                        if (i >= MapHeight)
                        {
                            sw.WriteLine();
                            i = 0;
                        }
                        switch (Fields[x,y])
                        {
                            case FieldTypes.Nothing:
                                sw.Write('.');
                                break;
                            case FieldTypes.Block:
                                sw.Write('0');
                                break;
                            case FieldTypes.Goal:
                                sw.Write('1');
                                break;
                            case FieldTypes.Spawn1:
                                sw.Write('2');
                                break;
                            case FieldTypes.Spawn2:
                                sw.Write('3');
                                break;
                        }
                        i++;
                    }
                }

                System.Windows.Forms.MessageBox.Show("Die Map wurde erfolgreich gespeichert");

                sw.Close();
                sw.Dispose();
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show("" + ex);
            }
        }


Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

7

30.09.2012, 13:09

if (i >= MapHeight)

Das MapHeight sollte mMn eher ein MapWidth sein, oder?
Du speicherst ja linien- und nicht zeilenweise.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

8

30.09.2012, 13:17

Dann siehts aber so aus:

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
0...............0........
.......0...............0.
..............0..........
.....0.........1.....0...
............0............
.0.00000.........0.0...0.
........0.0...0.........0
.0...0.......000.0...0000
0000....0...0...........0
.3.0...........0...0.....
......0...0...........0..
.0...........0...0.......
....0...0.......2...0...0
...........0...0.........
..0...0...........0...0..
.........00000...........


9

30.09.2012, 13:18

So kann man da jetzt nicht gerade was zu schreiben, auf jeden Fall solltest du, wenn du "0000000000000000000000000" statt "0000000000000000" haben möchtest, folgendes ändern:

C#-Quelltext

1
2
3
4
5
if (i >= MapWidth) //Vorher: i>=MapHeight
{
      sw.WriteLine();
      i = 0;
}

Ansonsten ist es, von der Werten her, eigentlich eine Sache des Inhaltes von Fields...
Naja, wäre vielleicht auch noch sinnvoll x und y herum zu drehen.
Willst du in einer Zeile das Y haben oder in einer Zeile X?
Also mal kleines Beispiel: So wie es da jetzt ist, auch ohne die vorgeschlagene Änderung der Bedingung für/mit dem Integer, würde folgende Map eigentlich so abgespeichert werden:
Map:

C#-Quelltext

1
2
3
4
01010101
10101010
02020202
20202020

Was eigentlich gespeichert werden würde: (kommentiertes natürlich ignorieren)

C#-Quelltext

1
2
0102/*nächsteSpalte*/1020/*nächsteSpalte*/0102/*nächsteSpalte*/1020/*Umbruch da Integer == 16*/
0102/*nächsteSpalte*/1020/*nächsteSpalte*/0102/*nächsteSpalte*/1020/*kein Umbruch, da Schleife(n) Bedingungen erfüllt, Map gespeichert*/

Nochmal ohne Kommentare:

C#-Quelltext

1
2
0102102001021020
0102102001021020

Du speicherst also vertauscht, y wird in jede Zeile geschrieben, x in jede Spalte, sozusagen.
Also wenn du das nicht haben willst, solltest du vielleicht so umändern:

C#-Quelltext

1
2
3
for (int y = 0; y < MapHeight; ++y)
{
    for (int x = 0; x < MapWidth; ++x)

Kurz so als Satz, damit es vielleicht noch klarer wird: Pro Spalte (also Y) soll in eine Zeile des Streams X rein.
So wie du es hast heißt es eben: Pro Zeile [auf der Map] (also X) soll in eine Zeile des Streams Y rein.

MfG
Check

//EDIT: von der Zeit her ein wenig spät. Beziehe mich auf den Beitrag um 12:49

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Checkmateing« (30.09.2012, 13:26)


10

30.09.2012, 13:24

Das mit dem x und y vertauschen habe ich auch schon probiert, nur dann bekomme ich folgendes:
"Der Index war außerhalb des Arraybereichs"


Werbeanzeige