Ahoj.

Naprosto souhlasim. Snad jeste podotknout, ze uplne nejlepsi by bylo (jedla-li se o klientskou app nad SWINGem) to vyhledavani poustet asychronne.

Taky formulace "program se kousne" je dost vagni. Nejaka Exception nekde? Nebo to nekde nahore hlida catch(Exception e) {} ?

Podle toho ze se chyba obevuje az na konci soboru by to mohla byt OutOfMemory, ale to je wild gues :)

Honza

Martin Kuba napsal(a):

To je dost desuplny kod.
- micha dohromady GUI a vlastni funkcionalitu (vyhledavani v souboru)
- kdyz soubor neexistuje, misto vyjimky tise mlci
- pouziti RandomAccessFile je zcela zbytecne, staci BufferedReader
- smycka pro "n" pres pocet *bajtu* souboru, kdyz se cte po *radcich* je nesmyslna, stacilo by while((s=zdroj.readLine())!=null){...}
- substring() nasledovane compareTo() by nahradilo jedno startsWith()
- pokud vidim spravne zavorky, pro kazdy radek, ktery nezacina hledanym retezcem, to nastavuje jTextArea1.setText("OP NENALEZEN :-)");

Zkuste si napsat jednoduchou funkci s parametry String a File,
ktera najde dany String v onom Filu. Pak se vam chyba bude hledat snaz.


Makub

[EMAIL PROTECTED] wrote:

Zdravím,

mám následujíc kód pro porovnání rádků txt souboru jeden řádek má cca 20
znaků, celková velikost souboru je cca 50MB. (nelze použít DB) MMůj
problém: pokud je hledaná hodnota cca do 20 řádku (ověřeno) tak je nalezena , pokud se na chází ke konci souboru tak se mi program kousne. potřebuji s
tímto poradit. Děkuji DavidF

public void OP_cislo() throws IOException {
       String str1 = "op_vse.csv";

       File inputFile = new File(str1);
       jTextArea1.setText("");

       if(jTextField1.getText().length() == 0) {
         jTextArea1.setText("Vloz cislo OP !");
         return;
       }

       if(!inputFile.exists()) return;
       jTextArea1.setText("Vyhledávám .... ");
       RandomAccessFile zdroj = new RandomAccessFile(inputFile,"r");

       String s, a, b;
       int n, j;
       a = jTextField1.getText().trim();
       j = a.length();

       for (n = 0; n < inputFile.length(); n++){
                 s = zdroj.readLine();
                 if( s == null ) break;
                 if(s.length()>0){
                   b = s.substring(0,j);
//JOptionPane.showMessageDialog(contentPane,"zdroj " + s
+ "; ořez " + b + "; vstup " + a);
                   if(b.compareTo(a) == 0) {
                   jTextArea1.setText("OP: " + jTextField1.getText() +
                                      " BYL NALEZEN  !" + "\n");

//JOptionPane.showMessageDialog(contentPane,b.compareTo(a) + " ořez " + b +
"; vstup " + a);
                   break;
                   }
                   else jTextArea1.setText("OP NENALEZEN  :-)");
                 }

       }

       zdroj.close();
   }




Odpovedet emailem