Autor |
Beitrag |
compaq
Hält's aus hier
Beiträge: 4
|
Verfasst: So 24.06.12 12:44
Hallo zusammen,
ich habe eine Textdatei mit 10 Zeilen und 6 Spalten (verschiedene Wörter) die ich in ein mehrdimensionales Array speichern will. Anschließend sollen bestimmte Wörter dieser Datei auf verschiedene Textboxen ausgeben werden. Meine Versuche waren bis jetzt alle ohne Erfolg
ich hoffe mir kann hier jemand helfen
Danke
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 24.06.12 13:02
Hallo und  !
Eine Datei in ein Array einlesen kann man sehr einfach mit File.ReadAllLines(filename). Das Ergebnis dieses Aufrufs ist dann ein Array von Strings, jedes Element des Arrays ist eine Zeile der Datei. Um die einzelnen Zeilen dann in Wärter aufzudröseln kann man String.Split benutzen.
Wie man die Wörter dann am einfachsten in die Textboxen schiebt, kann man ohne mehr Informationen nicht sagen. So wäre interessant, ob die Namen der Textboxen einem bestimmten System folgen.
Grüße,
Christian
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
compaq 
Hält's aus hier
Beiträge: 4
|
Verfasst: So 24.06.12 13:08
Es soll am Ende ein kleines Quiz sein mit einer Textbox für die Frage (Zeile 0,Spalte 1 der txt) und vier Textboxen für die Antworten ( Zeile 0 ,Spalte 2-5)
Kann ich die einzelnen Felder nicht einfach mit einem Index (z.b [2,3]) benennen und darauf bei der Ausgabe zugreifen?
z.b txtFrage.Text = [2,3];
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 24.06.12 13:22
Ich habe doch oben geschrieben, wie Du an die einzelnen Teile der Textdatei heran kommst.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
compaq 
Hält's aus hier
Beiträge: 4
|
Verfasst: So 24.06.12 15:18
Ok Danke Christian, ich hab ein Beispiel mit der Split Funktion gefunden:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| using System; using System.IO;
class Program { static void Main() { int i = 0; foreach (string line in File.ReadAllLines("Quiz.txt")) { string[] parts = line.Split(','); foreach (string part in parts) |
doch wie kann ich jetzt z.B das zweite Wort der dritten Zeile in eine Textbox ausgeben?
Moderiert von Christian S.: C#-Tags hinzugefügt
|
|
Palladin007
      
Beiträge: 1282
Erhaltene Danke: 182
Windows 11 x64 Pro
C# (Visual Studio Preview)
|
Verfasst: So 24.06.12 15:47
Das kannst du mit einem herkömmlichen Array nicht so einfach lösen, wenn du nicht die Zeilen-Anzahl kennst, die dann die Anzahl der Elemente vor gibt.
Deshalb nehme ich eine Liste, die sehr ähnlich funktioniert, aber noch die Add-Methode besitzt.
Ich hab das mal aus dem Stegreif und ungetestet geschrieben:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| using System; using System.IO;
using System.Collections.Generic;
class Program { static void Main() { List<List<string>> Words = new List<List<string>>(); foreach (string line in File.ReadAllLines("Quiz.txt")) Words.Add(line.Split(',').ToList());
Console.WriteLine(Words[3][2]); Console.Read(); } } |
'Words' ist die verschachtelte Liste, die bisher noch ohne Elemente ist.
in der foreach-Schleife werden dann neue Elemente hinzu gefügt, die je eine Zeile darstellen, allerdings ist die Zeile dann noch leer. In jeder Zeile liegt dann wieder eine Liste (daher verschachtelt) und um die zu befüllen, nehmen wir die Split-Methode und nutzen dazu gleich noch die Methode ToList, die aus einem Array eine Liste macht. Das ganze wird dann gleich mittels Add in die verschachtelte Liste hinzu gefügt.
Und Aufrufen funktioniert dann genauso, wie mit einem Array, nur dass es nicht wie bei einem mehrdimensionalen Array (Trennung der Indexe mit einem Komma) sondern ein verschachteltes Array ist.
Gruß
|
|
compaq 
Hält's aus hier
Beiträge: 4
|
Verfasst: So 24.06.12 16:06
|
|
Palladin007
      
Beiträge: 1282
Erhaltene Danke: 182
Windows 11 x64 Pro
C# (Visual Studio Preview)
|
Verfasst: So 24.06.12 16:15
Hast du auch verstanden, was ich im Code gemacht habe?
Sonst hat das nämlich keinen Sinn.
Und eventuell solltest du dir auch die List-Klasse genauer anschauen, denn in den meisten Fällen bietet die sich besser an, als ein herkömmliches Array.
Auf lange Sicht und bei sehr vielen Elementen (ich rede von Zahlen über dem vier-stelligen Bereich) wird ist eine Liste langsamer, als ein Array, aber das dürfte dich in den wenigsten Fällen kümmern, daher ist eine Liste wahrscheinlich besser.
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: So 24.06.12 21:48
Warum sollte die Geschwindigkeit von List<> von der Elementzahl abhängen?
_________________ >λ=
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 24.06.12 22:22
Und die Geschwindigkeit welcher Operation überhaupt?
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Palladin007
      
Beiträge: 1282
Erhaltene Danke: 182
Windows 11 x64 Pro
C# (Visual Studio Preview)
|
Verfasst: So 24.06.12 22:42
Das hat mir ein Freund von einem anderen Forum erzählt und für mich klang das recht logisch, da intern ja noch zusätzliche Funktionen ausgeführt werden müssen, die bei dem herkömmlichen Array weg fallen.
Wenn ich falsch liege, lasse ich mich aber gerne belehren. 
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: So 24.06.12 23:51
Palladin007 hat folgendes geschrieben : | [...] da intern ja noch zusätzliche Funktionen ausgeführt werden müssen, die bei dem herkömmlichen Array weg fallen. |
Ja. Und warum sollte die Geschwindigkeit davon von der Elementzahl abhängen  ?
_________________ >λ=
|
|
Th69
      

Beiträge: 4798
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Mo 25.06.12 10:34
Hallo zusammen,
gemeint ist wohl das interne Reallozieren bei der Add-Methode, sobald die Anzahl größer als die Kapazität (Capacity) ist. Hierfür wird jedoch ein Verfahren gewählt (verdoppeln der bisherigen Kapazität), welches amortisiert O(1) ist.
Wenn man vorher aber schon weiß, daß man eine große Liste hat, so kann man dafür den List<T>(int capacity) Konstruktor benutzen, um die Kapazität vorzuinitialisieren.
Und was auch manchmal falsch gemacht wird, ist eine händische Schleife zum Kopieren von einer Collection in die andere zu programmieren, anstatt dafür die AddRange-Methode zu benutzen (da diese auch die Kapazität entsprechend vergrößert, sofern eine ICollection gegeben ist).
|
|
Palladin007
      
Beiträge: 1282
Erhaltene Danke: 182
Windows 11 x64 Pro
C# (Visual Studio Preview)
|
Verfasst: Mo 25.06.12 17:38
|
|