Autor |
Beitrag |
r0xta
      
Beiträge: 25
|
Verfasst: 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
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:
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:
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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 14.12.08 01:21
Hallo und  !
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 
      
Beiträge: 25
|
Verfasst: So 14.12.08 18:12
Vielen Dank für die schnelle Antwort!
Habe mich mal zu folgender Methode durchgebissen:
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:
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:
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:
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
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 14.12.08 18:25
|
|
r0xta 
      
Beiträge: 25
|
Verfasst: So 14.12.08 18:38
jaenicke hat folgendes geschrieben : | Wie hast du vorher geschrieben? |
ööh wie wo was vorher? ^^
jaenicke hat folgendes geschrieben : | 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
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 14.12.08 18:41
|
|
r0xta 
      
Beiträge: 25
|
Verfasst: So 14.12.08 18:48
du meinst meinen Code den ich ganz am Anfang hatte?
Den hab ich schon in die Tonne gegeben...
jaenicke hat folgendes geschrieben : | 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
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 14.12.08 18:54
Das vorher geschrieben bezog sich auf das Zitat, das ich danach geschrieben habe.
r0xta hat folgendes geschrieben : | 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 
      
Beiträge: 25
|
Verfasst: So 14.12.08 19:10
jaenicke hat folgendes geschrieben : | 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 
      
Beiträge: 25
|
Verfasst: Mo 15.12.08 16:58
bin immer noch am knobeln...
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 Kha: Code- durch C#-Tags ersetzt
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 15.12.08 17:13
Du willst doch in Zeile 12 nicht dem ganzen Array dateielemente einen Wert zuweisen sondern einem Wert darin  . 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: 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 
      
Beiträge: 25
|
Verfasst: Mo 15.12.08 18:56
Zitat: | Ein ungleichförmiges Array wird als "Array eines Arrays" deklariert |
läuft =)
vielen dank
|
|
|