Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Hit
Člen
Avatar
Hit:19.10.2014 17:32

Zdravím, při programování aplikace, která překládá soubory s diakritikou na soubory bez diakritiky jsem narazil na problém při načítání souboru. Pokud ve whilu dám podmínku while(br.readLine() != null), aplikace nevyhodí žádnou chybu, ale pokud se podívám do konzole, je vidět, že Reader vynechává některé řádky.

Problém jsem vyřešil tím, že jsem si vytvořil nekonečný while a uvnitř jsem přes if kontroloval NULL a případně hodil break. Přesto ale nechápu proč moje první řešení nefunguje. Budu vážně rád, pokud mi to někdo osvětlí :).

Příkládám problémovou část kódu a odkaz na soubor, který jsem načítal: http://www78.zippyshare.com/…44/file.html

package CharTranslator;


import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

/**
 * Testovací třída
 * @author Lukas
 */
public class Test {
    private int lineNumber;
    private FileReader fr;
    private BufferedReader br;


    public Test(){
        try {
            fr = new FileReader("D:\\test\\test.srt");
            br = new BufferedReader(fr);
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        }
    }


    public static void main(String[] args){
        Test t = new Test();
        t.readFile();
    }
    /**
     * Přečte soubor po řádcích a řádky přeloží.
     */
    public void readFile(){
      //  System.out.println("Velikost kolekce: " + steamIDs.size());
        lineNumber = 0;
        try {
            while (true){
            //while (br.readLine() != null){
                lineNumber++;
                line = br.readLine();
                if ( line == null ){
                    break;
                }
                //translate(line);
                System.out.println(line);
           }

            br.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }


}
Editováno 19.10.2014 17:35
Odpovědět
19.10.2014 17:32
Life's not about how hard you can hit, it's about how hard you can GET hit and keep moving forward.
Avatar
Rasto
Tvůrce
Avatar
Odpovídá na Hit
Rasto:19.10.2014 18:47

Ahoj,

nedavno som riesil podobnu situaciu.
Problem je v tom, ze do premennej line sa ti ulozi iba kazdy druhy riadok.
Totizto:
na tomto mieste:
while(br.readLine() != null) citas prvy riadok. Vyhodnoti sa podmienka a pointer sa automaticky posunie na dalsi riadok.

Potom na tomto mieste:
line = br.readLine(); citas druhy riadok a jeho obsah sa uklada do premennej line.

Nasledne sa cyklus opakuje pricom kazdym vyhodnotenim podmienky sa precita riadok a pointer sa posuva na dalsi. Vysledok je ze sa do line ulozi iba kazdy druhy riadok.

Skus podmienku while prerobit takto:
while (line = br.readLine() != null)

to druhe citanie (line = br.readLine()) by som vynechal uplne a v cykle nechal iba to ostatne co tam mas [translate(line), lineNumber++ a pod]

Neskusal som to, ale snad to bude fungovat.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
19.10.2014 18:47
Avatar
Hit
Člen
Avatar
Odpovídá na Rasto
Hit:19.10.2014 19:21

Funguje to, díky moc (v)

Nahoru Odpovědět
19.10.2014 19:21
Life's not about how hard you can hit, it's about how hard you can GET hit and keep moving forward.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.