Entwickler-Ecke
IO, XML und Registry - Datei auslesen anschließend in Array speichern
r0xta - So 14.12.08 01:19
Titel: Datei auslesen anschließend in Array speichern
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. - 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
r0xta - 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 - So 14.12.08 18:25
r0xta hat folgendes geschrieben : |
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?
r0xta hat folgendes geschrieben : |
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 - 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?
r0xta - 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 - 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 - 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 - 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 - 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 - Mo 15.12.08 18:56
Zitat: |
Ein ungleichförmiges Array wird als "Array eines Arrays" deklariert |
läuft =)
vielen dank
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!