Dobrý den,
malé dilema: Potřebuji string rozdělit na pole polí - na každém řádku skupinky oddělené separátorem. Nyní string dělím na list dle nových řádků a na každý řádek zvlášť používám další dělení. Nedá se strčit separátor a nový řádek do RegExu tak, aby vylezlo pole polí?
Děkuji.
Fórum › Regulární výrazy
Nedal by se parser zjednodušit?
#1 Matěj Andrle
Pokud děláš parser, tak nepotřebuješ jako výsledek pole polí, ale derivační strom.
Ani jsi nespecifikoval, jak velké to pole polí má být. Zřejmě to nebude pole polí, ale nějaká jiná struktura.
#2 Kit
Vím co potřebuji na parsování CSV...
proc parseLineOfCSV {line sepChar delChar} {
set end 0; set sepRE \\$sepChar; set delRE \\$delChar
regsub -- "$sepRE${delRE}${delRE}$" $line $sepChar\0${delChar}${delChar}\0 line
regsub -- "^${delRE}${delRE}$sepRE" $line \0${delChar}${delChar}\0$sepChar line
regsub -all -- {(^${delChar}|${delChar}$)} $line \0 line
set line [string map [list \
$sepChar${delChar}${delChar}${delChar} $sepChar\0${delChar} \
${delChar}${delChar}${delChar}$sepChar ${delChar}\0$sepChar \
${delChar}${delChar} ${delChar} \
${delChar} \0 \
] $line]
while {[regexp -indices -start $end -- {(\0)[^\0]*(\0)} $line -> start end]} {
set start [lindex $start 0]; set end [lindex $end 0]
set range [string range $line $start $end]
if {[string first $sepChar $range] >= 0} {
set line [string replace $line $start $end [string map [list $sepChar \1] $range]]
}
incr end
}
return [split [string map [list $sepChar \0 \1 $sepChar \0 {}] $line] \0]
}
#3 Matěj Andrle
Na parsování CSV se regulární výrazy prostě nehodí. Použij hotový parser nebo si napiš nový od nuly, ale regulární výrazy do toho netahej.
#7 Matěj Andrle
Pěkně to rozhodně nevypadá. Příklady na http://wiki.tcl.tk/38945 mi připadají hezčí.
V TCL jsem si napsal jen pár aplikací, ale jinak toho o něm skutečně moc nevím. Vadí to?
Zjistit počet nových příspěvků
Přidej příspěvek
Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
Uživatelé prohlížející si toto vlákno
Uživatelé on-line: 0 registrovaných, 7 hostů
Podobná vlákna
Můžete mi to prosím zjednodušit? Nebo okomentovat každý řádek...díky — založil Stickman
Parser v c# — založil Misiak
C# a Sql parser — založil ondra
Parser z M Onlajny — založil JirkaX
Moderátoři diskuze