[ cikiste @ 24.01.2004. 11:21 ] @
Pozdrav ljudi!

Interesuje me da li ste se sretali (i kako resavali) problem sledece vrste.
Na hardu se nalazi fajl koji sluzi kao svojevrstan log file. U njega se neprestano dodaju redovi podataka odredjene strukture. Zadatak je da se napravi program koji "nadgleda" taj log fajl, iscitava novoupisane redove i to kasnije prosledjuje negde (recimo u excell tabelicu ili negde slicno).
Moja razmisljanja: posto log fajl moze da raste meni nepoznato koliko, iscitavanje broja linija, pa poredjenje sa prethodno obradjenim brojem pa kasnije obrada svega toga je pretpostavljam neupotrebljiva (ili nije).
Stoga, ima li neko neku ideju?

S postovanjem,
Ivan.
[ mladenovicz @ 25.01.2004. 15:11 ] @
Za taj log fajl bi mozda zgodnije bilo koristiti XML umesto .txt fajla, jer je sa XMLom (bar po meni) lagodnije raditi. Taj XML bi mogao da izgleda ovako nekako:

Code:

<LogData>
    <LogItem ..... />
    <LogItem ..... />
    <LogItem ..... />
    <LogItem ..... />
</LogData>


E sad svaki LogItem cvor moze da ima atribut Processed="True/False", koji kaze da li je obradjen ili ne. Ili jos bolje, da root node ima atribut koji predstavlja informaciju o poslednjem obradjenom cvoru, posto sa ovakvom strukturom mozes pristupiti cvoru na osnovu rednog broja.

Code:

<LogData LastProcessed ="12">
    <LogItem ..... />
    <LogItem ..... />
    <LogItem ..... />
    <LogItem ..... />
</LogData>


Kad pocnes obradu log fajla, ucitas XML u DOMDocument, i pristupis LastProcessed+1 cvoru i od njega radis obradu. Ne moras da vodis racuna o broju linija i sl.

Ako ne mozes da koristis xml umesto txt, onda probaj da negde u fajlu (na pocetku?) cuvas informaciju o poslednjem obradjenom zapisu, ili da svaki zapis ima informaciju o tome da li je obradjen ili ne.
[ cikiste @ 25.01.2004. 17:49 ] @
Za taj log fajl bi mozda zgodnije bilo koristiti XML umesto .txt fajla, jer je sa XMLom (bar po meni) lagodnije raditi. Taj XML bi mogao da izgleda ovako nekako:

Nazalost ne moze. Taj tzv. Log file generise PLC u toku procese proizvodnje te i sama mogucnost uticaja na format toga "cuda" nije realna. Znaci rade se o txt (ni sam ne znam da li je svaki red formatizovan ili je nesto zbudzeno)
[ markotasic @ 26.01.2004. 16:00 ] @
Code:

Open sfile For Input As #1
Do
  Input #1, ListText1
  List1.AddItem ListText1

step1:

If EOF(1) then 
 Goto step1:
End If
  
DoEvents
Loop
Close #1


//edit (mladenovicz): dodat code tag

[Ovu poruku je menjao mladenovicz dana 26.01.2004. u 18:57 GMT]
[ mladenovicz @ 26.01.2004. 16:27 ] @
Koriscenje GoTo statementa bez potrebe je jako losa praksa.

Citat:
MSDN:
Too many GoTo statements can make code difficult to read and debug. Use structured control statements (Do...Loop, For...Next, If...Then...Else, Select Case) whenever possible.


Code:

    FNum = FreeFile
    
    Open FileName For Input As FNum

    While Not EOF(FNum)
        Line Input #FNum, Lin
        
        ' radi nesto
    Wend

    Close FNum
[ markotasic @ 26.01.2004. 16:44 ] @
Svidja mi se tvoje resenje.
[ cikiste @ 26.01.2004. 21:27 ] @
Citat:
mladenovicz:
Koriscenje GoTo statementa bez potrebe je jako losa praksa.

Citat:
MSDN:
Too many GoTo statements can make code difficult to read and debug. Use structured control statements (Do...Loop, For...Next, If...Then...Else, Select Case) whenever possible.


Code:

    FNum = FreeFile
    
    Open FileName For Input As FNum

    While Not EOF(FNum)
        Line Input #FNum, Lin
        
        ' radi nesto
    Wend

    Close FNum


Koliko razumem: Fajl se otvara periodicno i sekvencijalno iscitava od pocetka, liniju po liniju. Ok, neki brojac toliko si linija iscitao u prethodnoj iteraciji. Ali, ovo bi valjalo da se preskoci, tj. to sto sam iscitao u prethodnoj iteraciji i da se nastavi od mesta gde je nekada bio EOF bez nekih line input - wend "praznih" petlji.

Ivan.
[ mladenovicz @ 27.01.2004. 10:00 ] @
Pogledaj Text Stream objekat
i metode ReadLine i SkipLine, kao i property Line. Ili pogledaj Seek statement u MSDNu (za pozicioniranje na odredjeno mesto u fajlu).