Nedal by se parser zjednodušit? – Regulární výrazy – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Nedal by se parser zjednodušit? – Regulární výrazy – Fórum – Programujte.comNedal by se parser zjednodušit? – Regulární výrazy – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Matěj Andrle+1
Grafoman
21. 12. 2015   #1
-
0
-

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.

Nahlásit jako SPAM
IP: 31.30.56.–
Reklama
Reklama
Kit+11
Guru
22. 12. 2015   #2
-
0
-

#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.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Matěj Andrle+1
Grafoman
22. 12. 2015   #3
-
0
-

#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]
}
Nahlásit jako SPAM
IP: 31.30.56.–
Kit+11
Guru
22. 12. 2015   #4
-
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.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Matěj Andrle+1
Grafoman
22. 12. 2015   #5
-
0
-

#4 Kit
Tohle je ten hotový parser pro TCL! :S

Nahlásit jako SPAM
IP: 31.30.56.–
Kit+11
Guru
22. 12. 2015   #6
-
0
-

#5 Matěj Andrle
Však právě. Vypadá to hnusně.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Matěj Andrle+1
Grafoman
22. 12. 2015   #7
-
0
-

#6 Kit
Vypadá to pěkně a funguje to správně. Chci to jen zjednodušit! (Ty o TCL očividně vůbec nic nevíš.)

Nahlásit jako SPAM
IP: 31.30.56.–
Kit+11
Guru
22. 12. 2015   #8
-
0
-

#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?

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Matěj Andrle+1
Grafoman
22. 12. 2015   #9
-
0
-

#8 Kit
To co includuje - to je ten můj parser! (Já to jen vytáhl, abych netahal zbytečně více kódu, než potřebuji.) Takže jsi zase ze sebe udělal vola. (Kritizuješ můj kód a pak mi doporučíš, abych použil přesně ten. :S)

Nahlásit jako SPAM
IP: 31.30.56.–
Kit+11
Guru
22. 12. 2015   #10
-
0
-

#9 Matěj Andrle
Jsem zvědav, kdo ti po tomhle tvém duševním průjmu poradí...

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
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žit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 3 hosté

Podobná vlákna

Parser — založil flyer

Parser v c# — založil Misiak

C# a Sql parser — založil ondra

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý