NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Vstup ze souboru

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Safiron8
Člen
Avatar
Safiron8:11.1.2016 20:30

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.1.2016 20:30
Avatar
Invi
Tvůrce
Avatar
Odpovídá na Safiron8
Invi:11.1.2016 21:10

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.1.2016 21:13
 
Nahoru Odpovědět
11.1.2016 21:10
Avatar
Safiron8
Člen
Avatar
Safiron8:12.1.2016 17:19

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.1.2016 17:19
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Safiron8
pocitac770:12.1.2016 17:29

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.1.2016 17:29
 
Nahoru Odpovědět
12.1.2016 17:29
Avatar
Safiron8
Člen
Avatar
Safiron8:12.1.2016 17:31

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.1.2016 17:31
Avatar
Tomáš Brůna
Tvůrce
Avatar
Nahoru Odpovědět
12.1.2016 18:15
Vi veri universum vivus vici
Avatar
Martin Križan:12.1.2016 19:53

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.1.2016 19:53
Avatar
Safiron8
Člen
Avatar
Odpovídá na Martin Križan
Safiron8:12.1.2016 22:10

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.1.2016 22:10
Avatar
Martin Križan:12.1.2016 23:18

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í
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
12.1.2016 23:18
Avatar
Safiron8
Člen
Avatar
Odpovídá na Martin Križan
Safiron8:13.1.2016 14:55

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.1.2016 14:55
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Safiron8
pocitac770:13.1.2016 15:21

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.1.2016 15:21
 
Nahoru Odpovědět
13.1.2016 15:21
Avatar
Safiron8
Člen
Avatar
Odpovídá na pocitac770
Safiron8:13.1.2016 17:41

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.1.2016 17:41
Avatar
Safiron8
Člen
Avatar
Safiron8:3.1.2020 14:02

Ty kráso.. Najít takovou perlu po takové době :D No, začátky to byly hezký, teď v programování jedu až po uši a mám odmaturováno z IT.

 
Nahoru Odpovědět
3.1.2020 14:02
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 13 zpráv z 13.