Děkuji všem.-)
Oto Buchta
<[EMAIL PROTECTED] To: Java <[email protected]>
com> cc:
Sent by: Subject: Re: txt file compare
line
konference-bounc
[EMAIL PROTECTED]
05.09.2005 10:52
Please respond
to Java
On Monday 05 of September 2005 09:44, [EMAIL PROTECTED] wrote:
> Zdravím,
>
> mám následujíc kód pro porovnání rádků txt souboru jeden řádek má cca 20
A jsi si jistý, že tento kód dělá opravdu to, co chceš?
V else sekci pro compareTo() zobrazuješ hlášku o nenalezenosti OP, což je
asi
ten problém. Nebo se mýlím? Dále File.length() udává velikost v bytech a
nikoli jako počet řádků, tudíž klidně můžes for nahradit while (true) :-)
nebo spíš obvyklejší kombinací, kterou můžeš najít i v JavaDocu k java.io,
tedy while((s=zdroj.readLine())!=null)
A když už je to csv, proč k tomu přistupuješ přes substring() a compareTo()
(což lze spolehlivě nahradit za startWith() :-) ) a ne přes
StringTokenizer()? Co kdyby se ti změnil formát souboru? A proč to píšeš
jako
pod Tcl/tk a ne pod Javou? Krásná metoda modelu na nalezení čísla řádku
udávající shodu by mohla vypadat zhruba takto:
public static long shodaNaRadku(String jmenoSouboru, String text, int
poziceVCSV) throws IOException {
BufferedReader reader = new BufferedReader(new
FileReader(jmenoSouboru));
String radek;
StringTokenizer tokenizer;
int result = 0;
while ((radek = reader.readLine())!=null) {
tokenizer = new StringTokenizer(text);
for (int i=0;i<poziceVCSV;i++) {
if (tokenizer.hasMoreTokens()) {
tokenizer.nextToken();
}
}
if (tokenizer.hasMoreTokens()) {
if (text.equals(tokenizer.nextToken().trim())) {
return result;
}
}
result++;
}
return -1;
}
Ošetření případných výjimek, jeich odchycení a návrat aplikační výjimky už
nechám na tobě :-)
No a pak na jednoduché ověření, zda je či není shoda, navázat zobrazování
hlášek a máš to. A navíc máš kód mnohem přehlednější, udržovatelnější a
obecnější. Navíc si na tuto metodu můžeš napsat JUnitový test :-D a hned
budeš vědět, kde se ti co chová špatně...
--
Oto 'tapik' Buchta, [EMAIL PROTECTED]
Senior Engineer, Systinet Corp,
http://www.systinet.com