[ Blue82 @ 31.05.2011. 16:10 ] @
Imam problem sa menjanjem odredjenog stringa unutar fajla. Nacin na koji sam do sada menjao sve zapise koji pocinju odredjenim stringom je sledeci:

Code (vbnet):

        Dim Fs As FileStream = New FileStream("c:\Test.dat", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)
        Dim sw As New StreamWriter(Fs)
        Dim sr As New StreamReader(Fs)
        Dim str As String

        str = sr.ReadToEnd()
        str = str.Replace("Sta menjam", "U cega menjam")
        Fs.Position = 0
        Fs.SetLength(str.Length)
        sw.Write(str)
        sw.Flush()
        sw.Close()
        Fs.Close()

 


Na ovaj nacin menjam sve zapise tako reci u trenu a za ovaj program mi je brzina preko potrebna. E sad moj problem se odnosi na sledece.
Zapisi u datoteci su grupisani na ovaj nacin:

"zapis1","zapis2","zapis3"
"zapis1","zapis2","zapis3"
"zapis1","zapis2","zapis3"
"zapis1","zapis2","zapis3"
...
"zapis1",zapis2",zapis3"

Ako bih primenio gore prikazan code, promenio bih trazeni string u svim zapisima a meni to ne treba. Meni je potrebno da izmenu izvrsim samo npr u koloni zapis2. Znaci gde god da pronadje u koloni zapis2 trazeni string da ga promeni a da ne dira ostale kolone.

[Ovu poruku je menjao Shadowed dana 31.05.2011. u 17:25 GMT+1]
[ Blue82 @ 31.05.2011. 17:30 ] @
Ustvari, pojednostavljeno, moje pitanje je da li za tako nesto postoji neka napredna brza funkcija ili cu istu brzinu postici prepisivajuci fajla liniju po liniju i praveci izmene. Tako napravljene izmene snimam u drugi fajl takodje liniju po liniju i na kraju ga zatvorim i promenim ime kako je glasio originalni fajl a njegovu kopiju brisem?
[ Boris B. @ 01.06.2011. 23:51 ] @
Sa tako organizovanim fajlom (varijabilna duzina polja, sekvencijalno zapisano, bez indeksa) nemas nikakve sanse, moras skenirati red po red.

Ako moraju da budu fajlovi, za takvu vrstu promene najlakse i najbezbolnije je da napravis jedna kolona-jedan fajl, ako cesto menjas samo jednu kolonu u svim zapisima.
Mada najbolje je da koristis bazu, SQLite snima celu bazu u fajl i daleko je bolje resenje cak i od XML-a.
[ vujkev @ 02.06.2011. 02:09 ] @
Možda možeš da probaš sa RegEx-om
[ Blue82 @ 02.06.2011. 21:30 ] @
Na kraju sam napravio citanje red po red. Mislio sam da ce to biti sporo ali zapravo nije uopste. E sad da li je moj racunar jak ili .... videcu kad pocne da radi. Bazu sam prvo pravio ali ona je dosta velika i nezgrapna za to i trebalo bi da je lako razmenjiva pa je fajl ipak bolje resenje.

Hvala na pomoci u svakom slucaju.
[ wex-alpha @ 03.06.2011. 08:23 ] @
Kao sto ti je Boris rekao, SQLite ti je najbolja solucija.

Imat ces problema, kad (ako) ti txt fajl naraste.
[ Blue82 @ 03.06.2011. 15:56 ] @
Postoji li razlika izmedju SQLite i npr Access-ove baze? Prvo sam napravio verziju sa ovom drugom a onda sam shvatio da su fajlovi preveliki. Ono sto mi staje u fajl od 200-300kb kad se strpa u bazi dobije se 50mb. Kako fajl treba da bude lako razmenjiv to mi nije resenje.
[ wex-alpha @ 03.06.2011. 20:06 ] @
Da, razlika postoji izmedju ta dva sistema. Potrazi po google.

Sto setice koristenja SQLite, mozes pogledati dole navedeni thread. Jeste da je pisan za WPF, ali slobodno ignorisi XAML, i obrati paznju na C# kod.

Kod je lagan, tako da ces bez problema istu stvar uraditi i u VB.

http://www.elitesecurity.org/t399769-WPF-SQLite-How-to
[ Boris B. @ 06.06.2011. 12:10 ] @
Citat:
Ono sto mi staje u fajl od 200-300kb kad se strpa u bazi dobije se 50mb

Access jeste loš, ali nije toliko loš . Jedino ako baza nije dugo kompaktovana, ali da dođe do 50Mb za 300Kb osnovnog teksta malo teže, pod normalnim okolnostima. Mada uvek bi se pre odlučio za SQLite nego za Access, osim ako ne treba neka integracija sa ostalim MS rešenjima, mada i za to mislim da postoji SQLite oledb provajder.
[ Deep|Blue @ 24.06.2011. 10:51 ] @
Kao što kolege kažu rad će ti se drastično usporavati sa porastom veličine fajla.

Preporuka bi bila SQL lite, a za razmenu informacija između više radnih mesta možeš da korstiš i xml fajlove.
Na taj način dobijaš veću brzinu, male fajlove za razmenu i malo više programiranja.

No ako baš želiš da insistiraš na fajlu, možeš da koristiš samo xml ...
u biti sve ti ostaje u jednom fajlu, koji učitavaš direktno u dataset sa kojim ti je kasnije drastično olakšan rad, a dodatno izbegavaš stalno vršljanje po dat fajlu.
U odnosu na čist dat fajl, xml fajl će da ti poraste oko 10% zbog tagova.
[ sallle @ 04.08.2011. 15:04 ] @
kako topom ubiti muvu....

Zbog takvih problema je izmisljen (G)AWK.
[ Deep|Blue @ 12.08.2011. 10:03 ] @
@sallle
Što top i što mušica?

Mušica je trenutno nedefinisana, mada je Blue82 naveo da mu je baza posatajala prevelika. Dakle moguće da bi od te mušice nastao i solidan slon. Bilo bi lepo da psotoji i opis te baze sa navedenim razlozima za toliki rast veličine.

Top?! - XML nikako ne bih nazvao topom, jer ima zbilja široko polje primena. SQL lite opet predstavlja krajnje jednostavan engine, ipak dovoljno jak da se snađe sa pristojnim bazama.

GAWK - Fino deluje na prvi pogled, ali to je opet ređe korišćen third party, još port sa linuxa i opet radi sekvencijalno sa običnim datotekama.
[ sallle @ 14.08.2011. 04:10 ] @
skript.gawk:
Code:

BEGIN{
    FS=","
}
{
    gsub("sta menjam","u cega menjam",$2)
    print $0
}


Code:

gawk -f skript.gawk ulazni_fajl.txt > izlaz.txt



[ Deep|Blue @ 19.08.2011. 08:56 ] @
Otprilike sam shvatio šta je GAWK, ali on i dalje ostaje 3rd party tool, dakle potrebne su instalacije dodatnih programa. upoznavanje sa sistem funkcionisanja. Distribucija i instalacija na strani klijenta (Što pogotovo može da donese glavobolje) ...

A početni zahtev plavog je bio
Citat:
Blue82: ... Meni je potrebno da izmenu izvrsim samo npr u koloni zapis2. ...


@jnk
Inače, kako se GAWK ponaša sa većim fajlovima?
[ sallle @ 19.08.2011. 15:13 ] @
Citat:

Otprilike sam shvatio šta je GAWK, ali on i dalje ostaje 3rd party tool, dakle potrebne su instalacije dodatnih programa. upoznavanje sa sistem funkcionisanja. Distribucija i instalacija na strani klijenta (Što pogotovo može da donese glavobolje) ...



Druze ja pricam o gawk.exe koji ima 191KB, i koji fajl od 2.5GB prolazi za 1.5min...

A ti ako mislis da treba da iznajmis MAN-ov sleper da bi se napravio krug oko ade, samo izvoli...