Autor Beitrag
r0xta
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: So 14.12.08 01:19 
Hallo zusammen!

Habe ein kleines Problem, welches für einen geübten Programmierer sicher kein Problem darstellt.
Da ich aba erst mit dem Programmieren begonnen habe, weiß ich nicht ganz wie ich an die Sache ran gehen soll.

Folgendes:

Ich hab die Datei test.txt

ausblenden Quelltext
1:
2:
1;wort1.1;wort1.2;wort1.3;wort1.4
2;wort2.1;wort2.2;wort2.3;wort2.4


In C# lese ich die Datei ein:
ausblenden Quelltext
1:
StreamReader srf = new StreamReader("test.txt")					


Gibt es nun die Möglichkeit Zeile für Zeile als Array zu speichern?
Damit ich quasi hinterher folgendes erhalte:

ausblenden Quelltext
1:
2:
string[] 1 = {wort1.1, wort1.2, wort1.3, wort1.4}
string[] 2 = {wort2.1, wort2.2, wort2.3, wort2.4}


Oder muss ich an die Sache anders rangehen?

Vielen Dank schon mal im Voraus!
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 14.12.08 01:21 
Hallo und :welcome:!

Das geht durchaus. Du wirst sicherlich weiterkommen, wenn Du zuerst mal mit File.ReadAllLines arbeitest, und Dir dann mal die Split-Methode bei Strings ansiehst :-)

Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
r0xta Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: So 14.12.08 18:12 
Vielen Dank für die schnelle Antwort!

Habe mich mal zu folgender Methode durchgebissen:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
 
       public string lade_katalog()
        {
            string pfad = "C:\..\fragenkatalog.txt";
            string[] leseDatei = File.ReadAllLines(pfad); 
            char[] trennzeichen = { ';' };
            string[] dateielemente = leseDatei.Split(trennzeichen);             
            return dateielemente[2];
        }


Aber irgendwie scheine ich wohl noch einen Fehler zu haben...

Zitat:
"System.Array" enthält keine Definition für "Split", und es konnte keine Erweiterungsmethode "Split" gefunden werden, die ein erstes Argument vom Typ "System.Array" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?) C:\***\Projects\quiz\quiz\engine.cs



Abgesehen davon, hab ich mir natürlich Gedanken gemacht was ich als Ergebnis bekomme wenn die Methode funktioniert.
Meine Datei fragenkatalog.txt müsste dann in dem Array dateielemente gespeichert werden.
Im fragenkatalog.txt ist ja folgendes gespeichert:

ausblenden Quelltext
1:
2:
1;wort1.1;wort1.2;wort1.3;wort1.4;
2;wort2.1;wort2.2;wort2.3;wort2.4;


Mein Array dateielemente müsste dann wohl hinterher so aussehen:

ausblenden Quelltext
1:
string [] dateielemente = { 1, wort1.1, wort1.2, wort 1.3, wort 1.4, 2, wort 2.1, wort 2.2, wort 2.3, wort2.4 }					


mit return dateielemente[6]; würde ich wort2.1 zurückerhalten.

So weit korrekt? Oder hab ich einen Denkfehler?

Aber eigentlich wollte ich ja zu folgendem Ziel kommen:
ausblenden Quelltext
1:
2:
string[] 1 = {wort1.1, wort1.2, wort1.3, wort1.4}
string[] 2 = {wort2.1, wort2.2, wort2.3, wort2.4}


Muss ich dann dateielemente noch mal splitten? Geht doch nicht mehr, da kein Trennzeichen mehr vorhanden ist oder?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 14.12.08 18:25 
user profile iconr0xta hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
       public string lade_katalog()
        {
            string pfad = "C:\..\fragenkatalog.txt";
            string[] leseDatei = File.ReadAllLines(pfad); 
            char[] trennzeichen = { ';' };
            string[] dateielemente = leseDatei.Split(trennzeichen);             
            return dateielemente[2];
        }
Wie hast du vorher geschrieben?
user profile iconr0xta hat folgendes geschrieben Zum zitierten Posting springen:
Gibt es nun die Möglichkeit Zeile für Zeile als Array zu speichern?
Du versuchst Split auf das ganze Array anzuwenden, du musst aber mit einer Schleife die Zeilen durchgehen und es auf dein einzelnen String leseDatei[i] anwenden ;-).
r0xta Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: So 14.12.08 18:38 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Wie hast du vorher geschrieben?

ööh wie wo was vorher? ^^


user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Du versuchst Split auf das ganze Array anzuwenden, du musst aber mit einer Schleife die Zeilen durchgehen und es auf dein einzelnen String leseDatei[i] anwenden ;-).


ok... ich glaube ich habe File.ReadAllLines missverstanden =)
Bin egtl davon ausgegangen dass ich damit alle Zeilen in ein Array einlese.

Aber leseDatei[0] entspricht dann wohl der 1. Zeile und leseDatei[1] der zweiten Zeile meiner Textdatei?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 14.12.08 18:41 
user profile iconr0xta hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Wie hast du vorher geschrieben?

ööh wie wo was vorher? ^^
Na, oben in deinem ersten Beitrag. :mrgreen:

user profile iconr0xta hat folgendes geschrieben Zum zitierten Posting springen:
ok... ich glaube ich habe File.ReadAllLines missverstanden =)
Bin egtl davon ausgegangen dass ich damit alle Zeilen in ein Array einlese.
So ist es ja auch.

user profile iconr0xta hat folgendes geschrieben Zum zitierten Posting springen:
Aber leseDatei[0] entspricht dann wohl der 1. Zeile und leseDatei[1] der zweiten Zeile meiner Textdatei?
Richtig, so greifst du ja auch auf die einzelnen Elemente des Arrays (Zeilen) zu. ;-)
r0xta Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: So 14.12.08 18:48 
du meinst meinen Code den ich ganz am Anfang hatte?
Den hab ich schon in die Tonne gegeben...


user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Richtig, so greifst du ja auch auf die einzelnen Elemente des Arrays (Zeilen) zu. ;-)

stimmt...
man bin scho bisserl verwirrt ^^

noch ma langsam zum "mitdenken":
leseDatei[0] liefert mir dann meine komplette erste Zeile wieder.
Auf leseDatei[i] wende ich jetzt meinen Split an, damit ich die einzelnen Elmente der Zeile bekomme.

Bin ich dabei?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 14.12.08 18:54 
Das vorher geschrieben bezog sich auf das Zitat, das ich danach geschrieben habe. ;-)

user profile iconr0xta hat folgendes geschrieben Zum zitierten Posting springen:
leseDatei[0] liefert mir dann meine komplette erste Zeile wieder.
Auf leseDatei[i] wende ich jetzt meinen Split an, damit ich die einzelnen Elmente der Zeile bekomme.
Richtig.

Zur Speicherung kannst du auch ein zweidimensionales Array benutzen, wenn du auch die einzelnen Elemente der Zeile zur Verwendung speichern möchtest.
r0xta Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: So 14.12.08 19:10 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Das vorher geschrieben bezog sich auf das Zitat, das ich danach geschrieben habe. ;-)


ok bin glaub ich dabei ^^ hat sich ja dann aber auch scho erledigt...
bin scho bisserl kirre vom vielen programmieren.

Mehrdimensionales Array... gute Idee eigentlich.
Da ich später auf die einzelnen Elemente zugreifen möchte könnte das der geschicktere Weg sein.
r0xta Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: Mo 15.12.08 16:58 
bin immer noch am knobeln...

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
        public string lade_katalog()
        {
            string pfad = @"C:\..\fragenkatalog.txt";
            string[] leseDatei = File.ReadAllLines(pfad); 
            string[,] dateielemente = new string[100,7];

            for (int zeile = 0; zeile < 100; zeile++ )
            {
                for (int spalte = 0; spalte < 8; spalte++)
                {
                    char[] trennzeichen = { ';' };
                    dateielemente = leseDatei[spalte].Split(trennzeichen);
                }
                char[] trennzeichen2 = { ';' };
                dateielemente = leseDatei[zeile].Split(trennzeichen2);
            }

            return dateielemente[1,1];    

        }


Zitat:
Eine implizite Konvertierung vom Typ "string[]" in "string[*,*]" ist nicht möglich.


argh... hat jemand nen Tipp wie ich ein eindimensionales Array in ein mehrdimensionales umwandeln kann?

Moderiert von user profile iconKha: Code- durch C#-Tags ersetzt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 15.12.08 17:13 
Du willst doch in Zeile 12 nicht dem ganzen Array dateielemente einen Wert zuweisen sondern einem Wert darin ;-).
ausblenden C#-Quelltext
1:
 dateielemente[zeile, spalte] =					

// EDIT:
Ich habe das nicht getestet, ich hab hier grad kein C#, aber so müsste es eigentlich klappen:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
    public string[][] lade_katalog()
    {
      string pfad = @"C:\..\fragenkatalog.txt";
      string[] leseDatei = File.ReadAllLines(pfad);
      string[][] dateielemente = new string[leseDatei.Length][];

      for (int zeile = 0; zeile < leseDatei.Length; zeile++ )
        dateielemente[zeile] = leseDatei[zeile].Split(';');

      return dateielemente;
    }
r0xta Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25



BeitragVerfasst: Mo 15.12.08 18:56 
Zitat:
Ein ungleichförmiges Array wird als "Array eines Arrays" deklariert


läuft =)
vielen dank