[ rgdrajko @ 14.07.2007. 22:12 ] @
Kako da trenutno ucitam veliki txt fajl u textbox, listbox... |
[ rgdrajko @ 14.07.2007. 22:12 ] @
[ Eurora3D Team @ 14.07.2007. 23:03 ] @
Citat iz MSDN-a " The Text setting for a TextBox control is limited to 2048 characters unless the MultiLine property is True, in which case the limit is about 32K. " Prevod Tekst podesavanje TextBox kontrole je ograniceno na 2048 karaktera ukoliko MultiLine osobina nije True , u tom slucaju limit je oko 32K [ Shadowed @ 15.07.2007. 00:14 ] @
A i listbox ce poceti da koci posle 1-2 hiljade stavki.
[ icobh @ 15.07.2007. 00:37 ] @
Evo da se ja javim poslije xxx dana, još malo pod čokom, ali mislim da će biti sasvim OK ono što ću da kažem. Tj. samo prenesem nečiju ideju za listview ali koju je moguće primjeniti i na textbox. Naime ideja je sljedeća:
U textbox učitavaš samo onoliko linija koliko može korisnik da vidi. Mali algoritam za šetanje kroz taj text napraviš i eto rješenja problema. Nije sporo, efekat je isti i svi srećni na kraju ![]() [ rgdrajko @ 15.07.2007. 08:34 ] @
Hvala. Sve sto ste rekli je u redu, to je poznato. Veci fajl od 32kB cu podeliti na vise delova po 32 kB i po potrebi ucitavati te delove u text box da ne bih pravio sopstveni editor. Kako da trenutno ucitam iz tekstualnog fajla tih 32KB u text box jer ucitavanje preko line input traje nekoliko sekundi.
[ goranvuc @ 15.07.2007. 11:47 ] @
Koristi Microsoft RichText controlu, koja nema tih problema, i njenu metodu "LoadFile", kao npr:
Code: RichTextBox1.LoadFile "c:\Test.txt", rtfText [ rgdrajko @ 15.07.2007. 20:30 ] @
re GoranVuc
Hvala ti Gorane, zaboravio sam na RichText kontrolu jer je odavno nisam koristio. Inace ona, za razliku od textboxa koji moze ucitati do 64KB, ona nema ogranicenja. Ipak sa tim ne resavam pitanje brzog ucitavanja u listbox. Citat: icobh: U textbox učitavaš samo onoliko linija koliko može korisnik da vidi. Mali algoritam za šetanje kroz taj text napraviš i eto rješenja problema. Nije sporo, efekat je isti i svi srećni na kraju :) Tako sam i uradio i za textbox i za listbox. Hvala vam svima, ali resio sam problem otvarajuci tekstualni fajl kao binarni. Skoro trenutno ucitava 60K(oko 10.000 redova) iz txt fajla "ilustracije.txt" u textbox i u listbox. Ucitavanje preko Line input je sporo i traje desetak i vise sekundi. Evo kratkog primera, na brzinu, za brzo ucitavanje 60KB tekstualnog fajla u textbox i listbox. Code: Private Sub Form_Load() Const slog = 30000 Dim ocitanoizfajla As String * slog novarec = "" Open "c:\proba\ilustracije.txt" For Binary As #1 Len = slog duzinafajla = LOF(1) For n = 1 To duzinafajla Step slog Get #1, n, ocitanoizfajla novarec = novarec & ocitanoizfajla Next n Close ostatak = duzinafajla Mod slog druganovarec = "" Open "c:\proba\ilustracije.txt" For Binary As #1 Len = ostatak Get #1, duzinafajla - ostatak + 1, ocitanoizfajla druganovarec = druganovarec & ocitanoizfajla Close sadrzajfajla = novarec & druganovarec Text1.Text = sadrzajfajla niz = Split(sadrzajfajla, vbCrLf) For n = 0 To UBound(niz) List1.AddItem niz(n) Next n Label1.Caption = Label1.Caption & UBound(niz) End Sub [ BinLaden @ 17.07.2007. 15:20 ] @
Posto vidim da neznas rad sa fajlovima kod binarnog pristupa objasnicu ti gdje grijesis.
1. Kada otvaras fajl naredbom (Open "C:\test.txt" For Binary As #1) argument (Len = neki_broj) se zanemaruje odnosno duzina zapisa ne moze da se odredi pri binarnom pristupu nekoj datoteci. Duzinu procitanog zapisa odredjujes formatiranjem Varijable u koju ocitavas zapis odnosno odredjivanjem njene duzine. Recimo mozes ovako: "ocitanoizfajla = String(20, " ")" 2. Pri otvaranju fajla nije sigurno koristiti broj kao pokazivac na fajl (#1) jer nemora da znaci da je (#1) slobodan handle, odnosno bolje je napraviti varijablu, recimo "iFile" cjelobrojnog tipa i onda komandom (iFile = FreeFile) dobijas prvi slobodni handle za file koji ces da otvaras. Posle u naredbama Open, Get, Input... prosledjujes Varijablu "iFile" umjesto direktnog broja(#1). 3. Kod zatvaranja naredbom "Close" treba da se naglasi koji fajl zatvaras odnosno treba napisati (Close #1) ili jos bolje (close #iFile) ili mozes da koristis komandu "Reset" koja zatvara sve fjlove otvorene naredbom "Open". S onom for petljom si bezveze zakomplikovao kod, evo pojednostavljeno kako mozes pravilno i mnogo brze da uradis to sto ti treba, a i izbacen je nepotrbni kod koji si postovao u prethodnoj poruci: Code: Dim iFile As Long Dim sOut As String Dim iLen As Long iFile = FreeFile Open App.Path & "\ilustracije.txt" For Binary As #iFile iLen = LOF(iFile) sOut = String(iLen, " ") Get #iFile, 1, sOut Close iFile Text1.Text = sOut sOut = "" iFile = FreeFile Open App.Path & "\ilustracije.txt" For Input As #iFile Do Until EOF(iFile) Line Input #iFile, sOut List1.AddItem sOut Loop Close iFile Label1.Caption = Label1.Caption & List1.ListCount A sto se tice komande "Line Input", nije ona spora odnosno, ne usporava ona toliko program, nego samo upisivanje u listbox odnosno njegova komanda "List1.AddItem" koja se nalazi u petlji koja se izvrsava nekoliko hiljada puta oduzima najvise procesorskog vremena. A sto se tice brzine: Petlje "Do .... Loop" su gotovo uvijek brze od petlje (For ... Next). [ rgdrajko @ 17.07.2007. 17:31 ] @
Citat: BinLaden: Posto vidim da neznas rad sa fajlovima kod binarnog pristupa pristupa objasnicu ti gdje grijesis Hvala ti, mnogo si mi pomogao. Tek sada vidim koliko toga drugi znaju? Citat: BinLaden: 1. Kada otvaras fajl naredbom (Open "C:\test.txt" For Binary As #1) argument (Len = neki_broj) se zanemaruje odnosno duzina zapisa ne moze da se odredi pri binarnom pristupu nekoj datoteci. Duzinu procitanog zapisa odredjujes formatiranjem Varijable u koju ocitavas zapis odnosno odredjivanjem njene duzine. Recimo mozes ovako: "ocitanoizfajla = String(20, " ")" Odovor: Pa da li ti znas sta je ovo? Citat: Citat: BinLaden: 2. Pri otvaranju fajla nije sigurno koristiti broj kao pokazivac na fajl (#1) jer nemora da znaci da je (#1) slobodan handle, odnosno bolje je napraviti varijablu, recimo "iFile" cjelobrojnog tipa i onda komandom (iFile = FreeFile) dobijas prvi slobodni handle za file koji ces da otvaras. Posle u naredbama Open, Get, Input... prosledjujes Varijablu "iFile" umjesto direktnog broja(#1). 3. Kod zatvaranja naredbom "Close" treba da se naglasi koji fajl zatvaras odnosno treba napisati (Close #1) ili jos bolje (close #iFile) ili mozes da koristis komandu "Reset" koja zatvara sve fjlove otvorene naredbom "Open". S onom for petljom si bezveze zakomplikovao kod Odgovor: Pa procitaj sta je dole napisano. [/quote] Citat: rgdrajko: Evo kratkog primera, na brzinu, za brzo ucitavanje 60KB tekstualnog fajla u textbox i listbox. Inace ako nisi znao, binarni fajl se moze otvarati slicno i kao random fajl sto je gore kod mene demonstrirano. A sada i ja tebe da naucim kako se radi sa binarnim fajlovima(mada ne volim da ispravljam tudje programe); Code: Private Sub Form_Load() Dim iFile As Long Dim sOut As String Dim iLen As Long iFile = FreeFile Open App.Path & "\ilustracije.txt" For Binary As #iFile iLen = LOF(iFile) sOut = String(iLen, " ") Get #iFile, 1, sOut Close iFile Text1.Text = sOut niz = Split(sOut, vbCrLf) For n = 0 To UBound(niz) List1.AddItem niz(n) Next n Label1.Caption = UBound(niz) End Sub Mnogo je krace i prakticnije. [Ovu poruku je menjao rgdrajko dana 17.07.2007. u 21:20 GMT+1] [ rgdrajko @ 17.07.2007. 21:25 ] @
Citava ova gornja prica moze se napisati u 8 redova sa Richtextboxom koji je nevidljiv da bi upis bio u textboxu kao u zadatku. Uopste nema potrebe za textboxom jer je richtextbox bolji i nema ogranicenje od 64KB.
Code: Private Sub Form_Load() RichTextBox1.Visible = False RichTextBox1.LoadFile App.Path & "\ilustracije.txt", 1 savtekst = RichTextBox1.Text Text1.Text = savtekst niz = Split(savtekst, vbCrLf) For n = 0 To UBound(niz) List1.AddItem niz(n) Next n End Sub [ BinLaden @ 17.07.2007. 23:31 ] @
Al smo se napalili... heheh
Kao prvo napisao sam gdje grijesis pri koristenju naredbi (Open, Get, Close.....) Citat: Const slog = 30000 Dim ocitanoizfajla As String * slog unaprijed odrediti duzinu varijable proizvoljno i kasnije u drugu varijablu smijestati pojedinacno po 30000 znakova, pa onda izracunavati ostatak i dodavati jos taj dijeo. Pored ostalog time si potrosio ~60 KB memorije za varijablu koja sadrzi cijeli fajl i jos ~30 KB za tu varijablu na kojoj ucitavas pojedinacno podatke iz fajla. Citat: Inace ako nisi znao, binarni fajl se moze otvarati slicno i kao random fajl sto je gore kod mene demonstrirano. koji su zapisani u datoteci. Citat: A sada i ja tebe da naucim kako se radi sa binarnim fajlovima(mada ne volim da ispravljam tudje programe); pristupu fajlu naredbom "Open" odnosno u zavisnosti dali mu se pristupa sa (Binary ili Random ili Input, Output, Append) mijenja se nacin iscitavanja i upisivanja podataka u fajl. A to sto si izmijenio u odnosu na moj code (sto pokusavas da me naucis) nije uopste rad sa binarnim pristupom fajlu nego rad sa nizovima i stringovima. Citat: Mnogo je krace i prakticnije. i u prethodnoj poruci vec sam ti objasnio gdje se gubi najvise vremena. Citat: rgdrajko: Citava ova gornja prica moze se napisati u 8 redova sa Richtextboxom koji je nevidljiv da bi upis bio u textboxu kao u zadatku. Uopste nema potrebe za textboxom jer je richtextbox bolji i nema ogranicenje od 64KB. .............. Pitanje: Ako vec koristis RichTextBox, zasto onda jednostavno umjesto textboxsa na formu ne stavis RichTextBox umjesto sto ucitavas fajl u skriveni RTB pa onda u varijablu pa u TextBox. Onda ces imati samo jednu liniju koda kako ti je @goranvuc rekao negdje na pocetku teme. Jos nesto sto nisam rekao a tice se brzine: Pozeljno je uvijek definisati Promjenjivu prije njene upotrebe jer ne definisana promjenjiva uvijek je tipa Varijan koji je procesoru najsporiji za obradu, a kasnije u zavisnosti koja se vrijednost promjenjivoj dodjeljuje ta promjenjiva se prebacuje u tip podataka koji joj je dodijeljen. [ Aleksandar Ružičić @ 18.07.2007. 00:14 ] @
ok momci, dosta prepucavanja. vec je izneto nekoliko resenja za ovaj problem, nema potrebe dalje raspravljati o bilo cemu. lock!
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|