Diskuze: Vstup ze souboru

Java Java Vstup ze souboru

Avatar
Adolf Schrank:

Ahojte potřeboval bych poradit.. je to taková malá prkotina, ale já si už nevím rady jde o tohle:
Mám textový soubor (viz. obrázek) a v programu potřebuji aby vždy vypsal 3 řádky (takže jednu otázku) a pak se zastavil aby mohl uživatel napsat odpověd poté by tam naskočili další tři řádky a takhle by to jelo až do konce textového souboru. Za každou radu dopředu děkuji.

 
Odpovědět 11. ledna 20:30
Avatar
Dennis Tschamler
Redaktor
Avatar
Odpovídá na Adolf Schrank
Dennis Tschamler:

Mozna radsi zkus zmenit format souboru pro otázky na:

otazka1:spravnaOdpoved:odpovedA:odpovedB
otazka2:spravnaOdpoved:odpovedA:odpovedB
atd.

Poté ti bude stačit pouze vždy přečíst jeden řádek jako jednu otázku (Stačí rozparsovat řádek podle dvojtečky). Co se týče samotného čtení souborů, tak tě můžu odkázat na zdejší tutoriál - http://www.itnetwork.cz/java/soubory.

Editováno 11. ledna 21:13
 
Nahoru Odpovědět 11. ledna 21:10
Avatar
Adolf Schrank:

Jak to myslíš ? Trošička sem to nepochopil. Konkrétně jak to "rozparsovat". Hlavně nevím jak pomocí BufferedReaderu udělat jakoby mezeru v tom čtení. Protože tam je těch otázek víc a řekněme že už to mám v tom řádku ale i tak jak udělám to aby se vypsal 1 řádek a pak bylo místo pro odpověd napadlo mě to dát do cyklu, ale to stále neřeší to jak to rozkouskovat. Sorry jestli mi něco uniká :D

 
Nahoru Odpovědět 12. ledna 17:19
Avatar
pocitac770
Redaktor
Avatar
Odpovídá na Adolf Schrank
pocitac770:

Pravděpodobně myslel rozdělit přes .split() :D A jak přečíst jen jeden řádek a poté si dělat věci kolem? Použiješ jeden BufferedReader, na kterém zavoláš .readLine() a pak si děláš věci kolem, když je potřeba další řádka, tak opět .readLine() atd. Ovšem hádám, že kvůli zjednodušování zavírání používáš try-with-resources, takže tam by bylo lepší si přes cyklus načíst jednotlivé řádky např. do pole, odkud bys je poté postupně četl...

Editováno 12. ledna 17:29
 
Nahoru Odpovědět 12. ledna 17:29
Avatar
Adolf Schrank:

Tady je ten problém, že to je jakási práce a učitel po nás chce aby tam to čtení ze souboru bylo, ale já nemám vůbec tušení jak to udělat.

 
Nahoru Odpovědět 12. ledna 17:31
Avatar
Tomáš Brůna
Redaktor
Avatar
Nahoru Odpovědět 12. ledna 18:15
Lepší být šprt než blbec :)
Avatar
Martin Križan:

Skús toto:

public static void nacitajOtazku() throws Exception {
        BufferedReader b = new BufferedReader(new FileReader("subor.txt"));

        String riadok;
        while ((riadok = br.readLine()) != null) {//číta súbor po riadkoch
            String rozdelenyRiadok[] = riadok.split(":");//rozdelí riadok
        }
    }
 
Nahoru Odpovědět 12. ledna 19:53
Avatar
Odpovídá na Martin Križan
Adolf Schrank:

Nefunguje.. zapnu a nic nenapíše (do file readeru jsem dal cestu k souboru)
btw máš tam chybku v tom BufferedReaderu "b" a pak tam máš "br".readLine

 
Nahoru Odpovědět 12. ledna 22:10
Avatar
Martin Križan:

Sorry, nevšimol som si tú chybu. Ono to ani nemá nič písať, iba to načíta riadky so súboru a rozdelí ich. Ak to má aj vypisovať,mohlo by to vyzerať takto:

public static void main(String[] args) throws Exception {
        nacitajOtazku();
    }

public static void nacitajOtazku() throws Exception {
        BufferedReader br = new BufferedReader(new FileReader("subor.txt"));

        String riadok;
        while ((riadok = br.readLine()) != null) {
            String pole[] = riadok.split(":");
            System.out.println("Otázka: " + pole[0]);
            System.out.println("Správna odpoveď: " + pole[1]);
            System.out.println("Odpoveď A: " + pole[2]);
            System.out.println("Odpoveď B: " + pole[3]);
        }
    }
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 12. ledna 23:18
Avatar
Odpovídá na Martin Križan
Adolf Schrank:

Už jsem na to přišel.. sice je to asi trochu složitější ale funguje :D to mi stačí aji tak děkuju :)

try {
                    int[] spravnaOdpoved = new int[10];
                    spravnaOdpoved[0] = 1;
                    spravnaOdpoved[1] = 1;
                    spravnaOdpoved[2] = 2;
                    spravnaOdpoved[3] = 1;
                    spravnaOdpoved[4] = 1;
                    spravnaOdpoved[5] = 2;
                    spravnaOdpoved[6] = 1;
                    spravnaOdpoved[7] = 1;
                    spravnaOdpoved[8] = 2;
                    spravnaOdpoved[9] = 2;
                    String text = "";
                    for (int i = 0;i<10;i++) {
                       text=nem.readLine();
                       System.out.println(text);
                       System.out.print("Odpověď: ");
                       hodnoceni = kontrolaOdpovediOtazky(2, spravnaOdpoved[i])+hodnoceni;
                    }
                    nem.close();
                }catch (Exception e) {
                    System.out.println("Při výpisu otázky se vyskytla chyba. Zkontroluj umístění souborů s otázkami.");
                }
 
Nahoru Odpovědět 13. ledna 14:55
Avatar
pocitac770
Redaktor
Avatar
Odpovídá na Adolf Schrank
pocitac770:

Výborně :) Jenom pro pozdější "vývoj" by bylo lepší, kdyby jsi odpovědi k otázkám psal rovnou do toho txt souboru, pak jde rozšiřovat obsah bez zásahu do kódu :)

Editováno 13. ledna 15:21
 
Nahoru Odpovědět 13. ledna 15:21
Avatar
Odpovídá na pocitac770
Adolf Schrank:

Jasný tak já jsem na škole se zaměřením na informační technologii v prváku takže tohle učitelovy stačí :D no sem zvědavej co budu muset programovat ve vyšších ročnících :/ :)

 
Nahoru Odpovědět 13. ledna 17:41
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 12 zpráv z 12.