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();
}