Forum » Programiranje » file parsing
file parsing
cryptozaver ::
Ce ima kdo izkusnje z parsanjem txt fajlov prosim za en nasvet. Imam en neurejen txt fajl poln nekih zapisov v tabelaricni obliki, v vrsticah itd. Zapisi so loceni z tab, presledki in po vrsticah. Rabim pa te razne zapise potegnt ven in jih spremenit v neko urejeno obliko (like csv...). Kateri jezik priporocate in mogoce kaksen web page s primeri tutorijem... Preferiram VB, PHP, JS.
Thomas ::
Hja ... to ni simple. Kako velika pa je zadeva?
Man muss immer generalisieren - Carl Jacobi
EZ2BHard ::
Perl je prava stvar za to, z njim se da zelo hitro in enostavo urediti ravno to, kar potrebujes. Povej kaj tocno bi rad (lahko posljes tudi zasebno sporocilo), pa ti mogoce na hitro spesnim regularne izraze za zadevo.
cryptozaver ::
Hvala obema za odgovor Bom poslal en del fajla v ponedeljek. A z PHP ne bi slo? Ali pa VB?
EZ2BHard ::
Velikost datoteke ni vazna, jaz sem obdeloval ze datoteke velikosti par 100 Mb na tak nacin. PHP ima podporo za Perlove regularne izraze, zato bi slo tudi z njim. Ti bom poslal zasebno sporocilo z naslovom, kamor mi potem poslji komprimirano datoteko in podroben opis zeljene obdelave.
Mimogrede se to: ce imas Linux, imas najverjetneje tudi Perl ze na sistemu, razen ce uporabljas kaksno bolj eksoticno distribucijo.
cryptozaver ::
Imam lx in win kjer je gor perl. Z njim se se nisem ukvarjal - le z PHP nekaj. Kot receno v pon ti posljem se fajl da vidmo kaj se da narest.
d-mon ::
za take stvari lahko uporabis katerikoli malo bolj napreden editor od notepada.
Recimo TextPad (www.textpad.com).
Podpira regularne izraze in lahko naredis vse v editorju.
Ce bi pa rad program bi bil pa pribljizno takle v VC++ (MFC):
CStdioFile datfile;
CString buff;
datfile.Open("c:\\test.txt", CFile::modeRead);
while(datfile.ReadString(buff)) //preberi vrstico
{
//obdelaj vrstico.
//lahko uporabljas buff.Tokenize (ce so zapisi med sabo loceni z dolocenimi znaki) funkcijo ce imas VC++ 7.0
//lahko pa uprabljas buff.Mid funkcijo ce so si zapisi vedno na istih pozicijah.
}
datfile.Close;
Recimo TextPad (www.textpad.com).
Podpira regularne izraze in lahko naredis vse v editorju.
Ce bi pa rad program bi bil pa pribljizno takle v VC++ (MFC):
CStdioFile datfile;
CString buff;
datfile.Open("c:\\test.txt", CFile::modeRead);
while(datfile.ReadString(buff)) //preberi vrstico
{
//obdelaj vrstico.
//lahko uporabljas buff.Tokenize (ce so zapisi med sabo loceni z dolocenimi znaki) funkcijo ce imas VC++ 7.0
//lahko pa uprabljas buff.Mid funkcijo ce so si zapisi vedno na istih pozicijah.
}
datfile.Close;
[D-mon]
BigWhale ::
> Hja ... to ni simple. Kako velika pa je zadeva?
Thomas, ce je file randomly neurejen, potem res ni prevec simple. Drugace pa...
Clovek se vprasa, kdo bi dumpal podatke v tako neurejeni obliki, da imas posamezne zapise locene s tab space in cr/lf?! Ampak po mojem, tako zelo neurejeno ni. :)
Ce pa je, bo pa najhitreje to naredil z enim text editorjem, ki ga zelo dobro pozna :P
Thomas, ce je file randomly neurejen, potem res ni prevec simple. Drugace pa...
Clovek se vprasa, kdo bi dumpal podatke v tako neurejeni obliki, da imas posamezne zapise locene s tab space in cr/lf?! Ampak po mojem, tako zelo neurejeno ni. :)
Ce pa je, bo pa najhitreje to naredil z enim text editorjem, ki ga zelo dobro pozna :P
cryptozaver ::
Res je zadeva relativno neurejena. Poleg tega je treba upostevat se par pogojev. Recimo eni zapisi so postavljeni vertikalno:
1 a
2 b
3 c
4 d ....
Rabil bi pa 1234,abcd,.... To je glava tebele ki se obdela, ce tako zelim sicer ne, sledi pa se kup polj v tej tabeli. Hudic je tudi to, da zapisi niso vedno med sabo loceni z tab. Lahko so tudi samo presledki. Naslednji problem je stavek v katerem za '=' sledi stevilka ki jo rabim... d-mon, hvala za namig pa vendar premalo obvladam c da bi uspel resit zadevo. Mogoce ve kdo za kaksno stran na webu kjer so primeri. Al pa knjigo? Iz tega se ponavadi da marsikaj vun potegnt. BigWhale: uporaba text editorja je stopnja ki bi jo rad presegel in popolnoma avtomatiziral obdelavo fajla.
1 a
2 b
3 c
4 d ....
Rabil bi pa 1234,abcd,.... To je glava tebele ki se obdela, ce tako zelim sicer ne, sledi pa se kup polj v tej tabeli. Hudic je tudi to, da zapisi niso vedno med sabo loceni z tab. Lahko so tudi samo presledki. Naslednji problem je stavek v katerem za '=' sledi stevilka ki jo rabim... d-mon, hvala za namig pa vendar premalo obvladam c da bi uspel resit zadevo. Mogoce ve kdo za kaksno stran na webu kjer so primeri. Al pa knjigo? Iz tega se ponavadi da marsikaj vun potegnt. BigWhale: uporaba text editorja je stopnja ki bi jo rad presegel in popolnoma avtomatiziral obdelavo fajla.
Thomas ::
Jest bi lahko odprl tovrstno obrt. Brez heca - vendar je ne bom. Know how je precej specifičen in precej ga je, toda da se narediti "čudeže", kot pri vseh drugih restavriranjih. Zanima me pa, če je veliko povpraševanje za temi rečmi. Če je veliko broken date. MOGOČE bom odprl temo v S&T oddelku.
Man muss immer generalisieren - Carl Jacobi
rasta ::
@gorazd1: Hudic je tudi to, da zapisi niso vedno med sabo loceni z tab.
To je vseeno. Uporabiš funkcijo isspace, pa ti je vseeno, kakšne znake uporabljajo.
Sicer pa to, kar si opisal, se vse da sparsati z if stavki in zankami. Tudi, če vsebuje '=', samo za vsak token preveriš če vsebuje '=' in potem ustrezno preoblikuješ.
Najlažje pa je, npr. s fsa, razbiješ v leksikalne simbole in potem delaš s temi (v sinaktični analizi).
Drugače pa bolj podrobno predstavi, kaj točno moraš sparsati.
To je vseeno. Uporabiš funkcijo isspace, pa ti je vseeno, kakšne znake uporabljajo.
Sicer pa to, kar si opisal, se vse da sparsati z if stavki in zankami. Tudi, če vsebuje '=', samo za vsak token preveriš če vsebuje '=' in potem ustrezno preoblikuješ.
Najlažje pa je, npr. s fsa, razbiješ v leksikalne simbole in potem delaš s temi (v sinaktični analizi).
Drugače pa bolj podrobno predstavi, kaj točno moraš sparsati.
cryptozaver ::
Darkolord: VB za razliko od C ja vsaj nekoliko poznam. Ves za kake primere na webu ali knjigo?
darkolord ::
hja prav za primere glede tega ne vem, lahko ti pa pomagam, ce mi na mail (darko@hokej.si) posljes 1 del tega fajla da vidim kako izgleda in kaj hoces iz tega dobit
BigWhale ::
Gorazd, za popolno avtomatizacijo moras najti neko skupno lastnost teh podatkov. Drugace bo zadeva precej komplicirana :)
Ce so loceni s presledki in/ali TABi je to oboje skupaj whitespace. Ce imas pa posamezno polje razbito na vec vrstic, potem bo pa sploh zabavno. Se posebej ce ne ves na kolk vrstic imas razbito polje in katero polje je razbito na vec vrstic :)
Daj nekaj vrstic tega fajla sem poslji, da vidimo kako to sploh zgleda, ker zdaj bolj ali manj ugibamo :)
Ce so loceni s presledki in/ali TABi je to oboje skupaj whitespace. Ce imas pa posamezno polje razbito na vec vrstic, potem bo pa sploh zabavno. Se posebej ce ne ves na kolk vrstic imas razbito polje in katero polje je razbito na vec vrstic :)
Daj nekaj vrstic tega fajla sem poslji, da vidimo kako to sploh zgleda, ker zdaj bolj ali manj ugibamo :)
cryptozaver ::
Evo prilagam primer:
1.
number of BLUE systems = 1006
//S tega naj nastane datoteka blue.txt ki vsebuje vrednost 1006. Seveda jo mora program najt med mnozico drugih zapisov. Stavek je unikaten in tocno tak spreminja se le stevilka.
2.
//ko naleti na naslednji string 'DIRECT AMMO SUM' (potem sledi tabela na sliki) naj nastane fajl tabela.txt z vsebino:
14,7.62mmRfl,564.00
72,7.9mm OS,13.00
.
.
.
.
Ce resimo tole bo kar OK za zacetek
1.
number of BLUE systems = 1006
//S tega naj nastane datoteka blue.txt ki vsebuje vrednost 1006. Seveda jo mora program najt med mnozico drugih zapisov. Stavek je unikaten in tocno tak spreminja se le stevilka.
2.
//ko naleti na naslednji string 'DIRECT AMMO SUM' (potem sledi tabela na sliki) naj nastane fajl tabela.txt z vsebino:
14,7.62mmRfl,564.00
72,7.9mm OS,13.00
.
.
.
.
Ce resimo tole bo kar OK za zacetek
darkolord ::
ne je ni, ker si dal za pot slikice lokalno pot.. uploadaj jo na en server in daj link do nje
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Uvoz txt datoteke v excelOddelek: Programska oprema | 5011 (4648) | sebavet |
» | [Java]Branje podatkov iz datotekeOddelek: Programiranje | 2653 (1959) | jeryslo |
» | Program MathematicaOddelek: Programska oprema | 1294 (1082) | moj_nick |
» | kopiranje iz enega fajla v drug??Oddelek: Programiranje | 1218 (978) | Seth |
» | Program za branje IIS log fajlov; ce ga malo pokomentirateOddelek: Programiranje | 909 (856) | Microsoft |