PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C#: Wie Textdatei sinnvol einlesen?


Elemental
2006-04-22, 17:12:43
Hallo allerseits,
ich bin gerade Dabei mir einen Kanallisten-Editor für meinen neuen Sat-Receiver zu schreiben.

Dafür muss ich eine Textdatei einlesen, die in etwa so aussieht:


@USER FAVORITES FILE

@SATELLITE INFOMATION
##############################################################
# INDEX SATELLITE NAME LONGITUDE BAND
##############################################################
1 "SIRIUS (Ku)" 50 KU
2 "EUTELSAT 7 (Ku)" 70 KU
3 "EUTELSAT 10E (Ku)" 100 KU
4 "HOTBIRD (Ku)" 130 C-KU
5 "EUTELSAT 16E (Ku)" 160 KU
6 "ASTRA (Ku)" 192 KU
7 "ASTRA 28 (Ku)" 282 KU
@END SATELLITE

@TRANSPONDER INFOMATION
##############################################################
#SAT INDEX FREQUENCY SR TID NID POL
##############################################################
1 11740 8027 0 0 H
1 11747 27500 0 0 V
1 11766 27500 0 0 H
2 10960 6666 0 0 H
2 10964 13333 0 0 H
2 10964 13333 0 0 V
2 10968 6666 0 0 H
3 10956 2665 0 0 H
3 10957 3200 0 0 H
3 10959 3435 0 0 H
3 10959 4167 0 0 V
3 10962 3100 0 0 H
@END TRANSPONDER

@CHANNEL INFORMATION
################################################################################ ################################################################################ ########################
# TYPE : T(TV) R(RADIO)
# POL : H(Horizontal) V(Vertical)
# LOCK : L(LOCK) U(UNLOCK)
# SKIP : S(SKIP) N(NONE)
#
# INDEX CHANNEL NAME TYPE SATELLITE POS PROVIDER POL CRYPT LOCK SKIP FREQ SR SID NID TID VPID APID PPID
################################################################################ ################################################################################ ########################
1 "Das Erste" T "ASTRA (Ku)" 192 "ARD" H ____ L S 11836 27500 28106 1 1101 101 102 101
2 "ZDF" T "ASTRA (Ku)" 192 "ZDFvision" H ____ U N 11953 27500 28006 1 1079 110 120 110
3 "SAT.1" T "ASTRA (Ku)" 192 "ProSiebenSat.1" V ____ U N 12480 27500 46 133 33 1791 1792 1791
4 "RTL Television" T "ASTRA (Ku)" 192 "RTL World" H ____ U N 12187 27500 12003 1 1089 163 104 163
5 "RTL2" T "ASTRA (Ku)" 192 "RTL World" H ____ U N 12187 27500 12020 1 1089 166 128 166
6 "VOX" T "ASTRA (Ku)" 192 "RTL World" H ____ U N 12187 27500 12060 1 1089 167 136 167
7 "ProSieben" T "ASTRA (Ku)" 192 "ProSiebenSat.1" V ____ U N 12480 27500 898 133 33 255 256 255
8 "KABEL1" T "ASTRA (Ku)" 192 "ProSiebenSat.1" V ____ U N 12480 27500 899 133 33 511 512 511
9 "DAS VIERTE" T "ASTRA (Ku)" 192 "BetaDigital" H ____ U N 12460 27500 1793 133 5 2047 2048 2047
10 "DSF" T "ASTRA (Ku)" 192 "BetaDigital" V ____ U N 12480 27500 900 133 33 1023 1024 1023
11 "Bayerisches FS" T "ASTRA (Ku)" 192 "ARD" H ____ U N 11836 27500 28107 1 1101 201 202 201
@END CHANNEL

@END FILE



Wie würdet ihr sowas einlesen?

Ich hab jetzt das ganze File mal in einen String eingelesen und dann mit Delimiter "\r\n" gesplittet.

Jede Zeile hab ich dann nochmal mit " " gesplittet um an die Werte zu kommen.

Jetzt hab ich aber das Problem, das Kanalnamen ja auch blanks enthalten, z.B. wird "Das Erste" auch gesplittet.

Da muss es doch einen besseren Weg geben, um die Werte in mein internes Objektmodell zu kriegen!

Ich hoffe Ihr könnt mir mit ein paar konstruktiven Vorschlägen unter die Arme greifen!

mfG
Elemental

Kabelsalat
2006-04-22, 17:37:15
Ohne viele Worte: http://www.regular-expressions.info/

Coda
2006-04-22, 17:50:46
http://www.codeproject.com/csharp/spart.asp

Gast
2006-04-22, 20:28:57
Sollte das nicht mit OLEDB gehen? Liegt doch alles schön Tab limited vor.

Elemental
2006-04-22, 22:34:31
Ohne viele Worte: http://www.regular-expressions.info/

Weiche von mir!
Komische, kryptische Geheimsprache... ;D


Werd mir das mit dem Parser bei Codeproject mal anschauen.
Merci!

Kabelsalat
2006-04-22, 22:42:13
Der Tipp mit Spart klingt natürlich ganz besonders vielversprechend. Vielleicht hat Coda auch noch ein paar weitere Erklärungen bezüglich solcher Parser Generatoren auflager... würde mich auf jeden Fall auch interessieren.

Coda
2006-04-23, 00:20:28
Naja ich hab bisher nur Flex/Bison und boost::spirit verwendet. Im Prinzip sollte man eine BNF verstanden haben und Regexps dann gehts eigentlich recht einfach ;)

Kabelsalat
2006-04-23, 00:48:17
Mit regulären Ausdrücken komme ich desöfteren in Kontakt und habe sie mir mittlerweile eigentlich ziemlich gut verinnerlicht, aber BNF habe ich noch nie gehört :eek:

Gast
2006-04-23, 02:04:16
Mit regulären Ausdrücken komme ich desöfteren in Kontakt und habe sie mir mittlerweile eigentlich ziemlich gut verinnerlicht, aber BNF habe ich noch nie gehört :eek:
Backus-Naur-Form (http://de.wikipedia.org/wiki/Backus-Naur-Form)

Kabelsalat
2006-04-23, 09:31:35
Danke