ERLEDIGT
NEIN
NEIN
ANTWORTEN
16
16
ZUGRIFFE
2159
2159
EMPFEHLEN
-
Hallo,
ich bin grad am umschwenken und zwar von VB6 zu VC#.net
Die Logik an sich ist nicht dasschwierige sondern die doch erheblich andere Syntax (finde ich zumindest).
Mein momentanes Problem:
Unter VB6 konnte ich eine Texdatei in der z.B. eine Tabelle mit Zahlen gespeichert war, sequenziell mit
Code :1 2 3 4 5 6
Open sFile for Input as #FNR Do While Not EOF(FNR) Input #FNR, Var1 Input #FNR, Var2 Input #FNR, Var3 Loop
was mir unter C# doch etwas schwer fällt, da die Funktion 'Input' nichts vergleichbares in C# enthält (zumindest hab ich sie noch nicht gefunden)
Was ich machen kann ist:
Code :1 2 3 4 5 6 7 8 9 10 11 12
string path = cdl.FileName; if (File.Exists(path)) using (StreamReader sr = File.OpenText(path)) { string a; while ((a = sr.ReadLine ()) !=null) { Gx++; listView1.Items.Add(a); Gx=0; } sr.Close() ;
bringt mich aber zu dem Problem, daß ich nur Zeilenweise und nicht Blockweise einlese.
In der VB6 Methode konnte ich somit ein 3-dimensionales Int Array einlesen, bei der VC# Methode nur ein 1-dimensionales string Array einlesen.
Hmmm, kann mir jemand helfen, ohne die Split Methode nutzen zu müssen. Ich denke mal das es einen direkten Weg geben sollte um diese Aufgabe zu erledigen.
Danke im Vorraus
MordilloVC#.net - Auf gehts
-
19.12.04 21:15 #2
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
StreamReader kennt ja nicht nur Readline(), sondern auch Read() mit mehreren Überladungen. Hast du die schon versucht?
Ansonsten, was hast du gegen Split()?
Ich habe festgestellt, dass es oft besser ist, eine Aufgabe in mehrere Schritte aufzuteilen, anstatt alles auf einmal zu machen. Ich weiss nicht, ob dir das weiterhilft, aber fiel mir gerade so ein.Ich denke mal das es einen direkten Weg geben sollte um diese Aufgabe zu erledigen.
Wenn es natürlich vorgebene Funktionen geben könnte, die genau das erledigen, was man braucht, ist es natürlich äusserst sinnvoll, diese zu suchen und zu nutzen. Jedenfalls immer besser, als sie selber zu schreiben.Geändert von Kachelator (19.12.04 um 21:20 Uhr)
Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
....Bringt mich zu meiner nächsten Frage: Was ist im speziellen mit 'Überladung' gemeint ?
sr.Read() hab ich natürlich auch versucht, ohne gewünschten Erfolg.
Danke für die AntwortVC#.net - Auf gehts
-
21.12.04 18:38 #4
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
Überladen ist eine Funktion, wenn es sie in mehreren Versionen gibt, die unterschiedliche Parameter erwarten. Die Trim()-Methode der string-Klasse ist ein Beispiel: Einmal gibt es sie ohne Parameter. Dann entfernt sie alle Blanks an Anfang und Ende eines Strings. Eine weitere Überladung ist string.Trim( (params char[]); Diese Version entfernt nicht Blanks, sondern all die Zeichen, die in dem char-Array übergeben wurden.
Kannst du bitte ein Beispiel posten für die Datei, wie du sie einlesen willst? Das würde es mir einfacher machen, zu verstehen, was genau du mit "blockweise" meinst.Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
Code :
1 2 3 4 5 6 7 8
1 12500 15000 0 15 2 10000 10000 0 15 3 20000 20000 0 15 4 20000 0 0 15 5 40000 0 0 15 6 30000 -10000 0 15 7 20000 -10000 0 15 8 22500 -5000 0 0
So sieht die Tabelle (Beispiel, kann durchaus wesentlich länger sein, aber das spielt hier keine Rolle) aus die ich einlesen will. Handelt sich um Koordinaten und deren Parameter.
Ich möchte halt jeden Wert einer Zeile(Satz) einzeln einlesen um in dann gleich in ein ListView zu übergeben.
Code :1 2 3
ListView [U]Satz Nr. X Y Z Radius[/U] 1 10000 10000 0 15
usw.
Ich hoffe das es anschaulich ist.VC#.net - Auf gehts
-
22.12.04 15:28 #6
- Registriert seit
- Aug 2001
- Ort
- Österreich, Stmk, Graz
- Beiträge
- 2.783
Hi.
Du könntest die Datei in der diese Daten enthalten sind zeilenweise lesen, mit der Split-Methode die Zeile in ein Array teilen, und dann ein ListViewItem erstellen mit den ganzen SubItems etc.
Oder du verwendest RegEx um an die einzelnen Teile einer solchen Zeile zu kommen.
Das könnte dann so aussehen.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
using (StreamReader reader = new StreamReader("input.txt")) { while (reader.Peek() != -1) { string line = reader.ReadLine(); Regex regex = new Regex(@"(?<ID>\d+)\ +(?<Param1>[+|-]?\d+)\ +(?<Param2>[+|-]?\d+)\ +(?<Param3>[+|-]?\d+)\ +(?<Param4>[+|-]?\d+)", RegexOptions.Singleline); Match m = regex.Match(line); if (m.Success) { Console.WriteLine("#{0}\tParam1: {1}\n\tParam2: {2}\n\tParam3: {3}\n\tParam4: {4}\n\n", m.Groups["ID"], m.Groups["Param1"], m.Groups["Param2"], m.Groups["Param3"], m.Groups["Param4"]); } } }
Über m.Groups["ElementName"] kannst auf die einzelnen Zahlen zugreifen.
MfG,
AlexWith the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
Aaron Satie
Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
Captain Jean-Luc Picard, Stardate ~41294.5
Tutorials.de chattet. Hier gibts auch .net Support ^^
Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de
(moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions
-
22.12.04 15:34 #7
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
Das würde ich ungefähr so machen:
Nicht vergessen, Fehler abzufangen, wenn z.B. mal eine Zeile zu kurz ist!Code :1 2 3 4 5 6 7 8 9
string line; while ((line = sr.ReadLine ()) !=null) // zeile lesen { string entries[] = line.Split( new char[]{ ' ', '\t } ); // zeile zerlegen mithilfe von Blanks string entry0 = entries[0]; // auswerten string entry1 = entries[1]; string entry2 = entries[2]; string entry3 = entries[3]; }Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
Erstmal danke für die schnellen Antworten.
Leider hat keine Methode funktioniert:
Regex und Match werden erst gar nicht erkannt
und der zweite Vorschlag enthält zuviele Zeichen in new char[]
Code :1
line.Split( new char[]{ ' ', '\t } ); // zeile zerlegen
Da ich dieser Sprache erst seit einigen (effektiven) Stunden begegne, verwirrt mich die Syntax doch enorm, wenn man aus dem Hause VB6 kommt.
VC#.net - Auf gehts
-
22.12.04 16:16 #9
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
Oops, Tippfehler! Da muss noch ein einzelnes Hochkomma hinter das '\t'!
Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
22.12.04 16:21 #10
- Registriert seit
- Aug 2001
- Ort
- Österreich, Stmk, Graz
- Beiträge
- 2.783
Regex ist im Namespace System.Text.RegularExpressions.
Zitat von mordillo
Ich habs das Ding ausprobiert, das geht.With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
Aaron Satie
Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
Captain Jean-Luc Picard, Stardate ~41294.5
Tutorials.de chattet. Hier gibts auch .net Support ^^
Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de
(moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions
-
Ich hab mich für diese Variante entschieden, da dies meinen Bedürnissen am ehesten entspricht. Wenn ich jetzt auch noch verstehen würde wie du die line zerlegt hast ... das wär was wert.
Code :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
private void button1_Click(object sender, System.EventArgs e) { cdl.InitialDirectory = "C:" ; cdl.Filter ="Alle Dateien(*.*)|*.*"; cdl.Title ="Öffne Koordinaten"; cdl.ShowDialog() ; string path = cdl.FileName; if (File.Exists(path)) using (StreamReader reader = new StreamReader(path)) { while (reader.Peek() != -1) { string line = reader.ReadLine(); Regex regex = new Regex(@"(?<ID>\d+)\ +(?<Param1>[+|-]?\d+)\ +(?<Param2>[+|-]?\d+)\ +(?<Param3>[+|-]?\d+)\ +(?<Param4>[+|-]?\d+)", RegexOptions.Singleline); Match m = regex.Match(line); if (m.Success) { ListViewItem item1 = new ListViewItem(m.Groups["ID"].ToString (),0); item1.SubItems.Add ( m.Groups["Param1"].ToString ()); item1.SubItems.Add ( m.Groups["Param2"].ToString ()); item1.SubItems.Add ( m.Groups["Param3"].ToString ()); item1.SubItems.Add ( m.Groups["Param4"].ToString ()); listView1.Items.AddRange(new ListViewItem[]{item1}); this.Controls.Add (listView1); } } } }
Erstmal herzlichsten an beide für eure Mühe
VC#.net - Auf gehts
-
22.12.04 21:33 #12
- Registriert seit
- Aug 2001
- Ort
- Österreich, Stmk, Graz
- Beiträge
- 2.783
Ich verwende einen regulären Ausdruck. Das Tool wenns um verarbeiten von Zeichenketten geht. =)
Solltest mal reinlesen.. =)With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
Aaron Satie
Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
Captain Jean-Luc Picard, Stardate ~41294.5
Tutorials.de chattet. Hier gibts auch .net Support ^^
Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de
(moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions
-
Cool, danke.
Was mich jetzt allerdings zu meinem nächsten Problem bringt, asl ich weiter programmieren wollte.
Die einzulesenden Werte befinden sich nun wie gewollt im ListView, allerdings muß ich mit den Werten Rechenoperationen ausführen. Lege also int Var an und Versuche die Item Inhalte in die int Variablen zu schieben ,,,,,, möööp geht wieder nicht aufgrund der impliziten Konvertierung ... Na gut wandel ich vorher von Hand um .... Gibt es wieder keine Funktion mit der ich von Strong to Int wandeln kann ....
Variablen vom Typus Variant wie bei VB gibt es wohl nicht hier, oder ?
GrußVC#.net - Auf gehts
-
23.12.04 16:50 #14
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
So geht umwandeln:
Code :1 2
string text = "4711"; int zahl = Int32.Parse( text );
Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
Danke für die Superschnelle Antwort.
Warum ist denn hier alles so umständlich, ich dachte C# sollte so einfach sein( wohl falsch gedacht)
VC#.net - Auf gehts
Ähnliche Themen
-
scp, nur textdateien
Von PhoenixDH im Forum Linux & UnixAntworten: 2Letzter Beitrag: 14.09.05, 08:15 -
Schreibschutz bei TextDateien
Von Mailyn im Forum Visual Basic 6.0Antworten: 3Letzter Beitrag: 02.09.05, 09:54 -
Textdateien verändern ?
Von isiprofil im Forum .NET ArchivAntworten: 1Letzter Beitrag: 11.08.04, 13:26 -
seek in textdateien
Von savar im Forum Delphi, Kylix, PascalAntworten: 2Letzter Beitrag: 17.06.04, 15:56 -
PHP-Chat mit Textdateien...
Von Feldhofe im Forum PHPAntworten: 7Letzter Beitrag: 18.12.01, 16:21





Zitieren

Login




