Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Diskuze: Praca z textovim suborom

Java Java Praca z textovim suborom

Aktivity (1)
Avatar
ronep
Člen
Avatar
ronep:30.6.2015 14:38

v sekcii z pracou zo subormi pre javu som nasiel ako nacitat z textoveho suboru vsetko zaradom ale mna bi skor zaujimalo ako nacitat vibrani riadok v subore

 
Odpovědět 30.6.2015 14:38
Avatar
mara
Člen
Avatar
Odpovídá na ronep
mara:30.6.2015 15:03

Zkus načítat řádek po řádku a který řádek potřebuješ, tak tam se zastav.

Nahoru Odpovědět 30.6.2015 15:03
Co na srdci, to na Facebooku
Avatar
ronep
Člen
Avatar
ronep:20.7.2015 21:58

ok ale ja poviem programu ze chcem riadok 5 a on nacita 1-5 a potom sa zastavi to by aj isle ale ked mu poviem ze cgcem riadok 555 tak to bude nacitat riadok 1 az riadok 555 a medi tim mi zaplni ramku ani nigdi nedostane
ja chcem priamo len ten riadok ok ?

 
Nahoru Odpovědět 20.7.2015 21:58
Avatar
Odpovídá na ronep
Petr Štechmüller:20.7.2015 22:01

Ahoj, přímo na daný řádek se nedostaneš. Jediný způsob Ti tu už napsali a to načítat soubor řádek po řádku dokud se nedostaneš tam kam potřebuješ.

Nahoru Odpovědět 20.7.2015 22:01
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na ronep
Petr Štechmüller:20.7.2015 22:08

Tak bych se chtěl opravit. Trošku jsem zagooglil a přeci jenom jsem něco našel.
Pro načítání malých souborů můžeš použít toto:

String line = Files.readAllLines(Paths.get("file.txt")).get(555);

Pro načítání větších souborů pak toto:

try (Stream<String> lines = Files.lines(Paths.get("file.txt"))) {
            String line = lines.skip(555).findFirst().get());
        } catch (IOException e) {
            e.printStackTrace();
        }
Nahoru Odpovědět 20.7.2015 22:08
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na ronep
Martin Bartoš:28.7.2015 18:52

Skús toto:

String text_riadka="";
try (BufferedReader reader = new BufferedReader(new FileReader(Nejaky súbor)))
 {
      int pocet_riadkov_suboru=0;

            while(reader.readLine() != null)
             {
                        pocet_riadkov_suboru++;
             }

        for(int i=0;i<pocet_riadkov_suboru; i++)
        {
             String s=reader.readLine();
             if(i==Pozadovany_riadok)
             {
                text_riadka=s;
             }

        }

}catch(Exception e){e.printStackTrace();}

Trocha nepraktické ale hádam pôjde :-)

Nahoru Odpovědět 28.7.2015 18:52
Nejsom kreatívny...
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Martin Bartoš
Jan Vargovský:28.7.2015 19:01

Takže se zeptáš streamu n-krát, jestli má ještě řádek, on ti pak řekne u n+1 pokusu, že nemá a ty se ho ještě n krát budeš zkusit přesvědčit, jestli tam fakt nic nemá? Tohle fungovat opravdu nebude :D

 
Nahoru Odpovědět  +1 28.7.2015 19:01
Avatar
Odpovídá na Jan Vargovský
Martin Bartoš:28.7.2015 19:12

Ani nefunguje :-D , Nejako som to nepremyslel :-`

Nahoru Odpovědět 28.7.2015 19:12
Nejsom kreatívny...
Avatar
Odpovídá na Petr Štechmüller
Michal Žůrek (misaz):28.7.2015 19:15

to sice vypadá elegantně, ale je to dost hnusné. protože toto načte do paměti všechny řádky.

Nahoru Odpovědět  +2 28.7.2015 19:15
Nesnáším {}, proto se jim vyhýbám.
Avatar
Martin Bartoš:28.7.2015 19:27

Oprava toho hore:

 while(reader.readLine() != null)
{
           pocet_riadkov_suboru++;
           System.out.println(pocet_riadkov_suboru);
           String s=reader.readLine();
           if(pocet_riadkov_suboru==Pozadovany riadok)
           {
                   text_riadka=s;
                   break;
           }
}

Tentoraz odskúšané ;-)

Nahoru Odpovědět 28.7.2015 19:27
Nejsom kreatívny...
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Martin Bartoš
Jan Vargovský:28.7.2015 19:33

Nešlo by to zkrátit? :)

 
Nahoru Odpovědět 28.7.2015 19:33
Avatar
Odpovídá na Jan Vargovský
Martin Bartoš:28.7.2015 19:39

Určite hej, ale nenapadá mňa :-D

Nahoru Odpovědět 28.7.2015 19:39
Nejsom kreatívny...
Avatar
Odpovídá na Martin Bartoš
Michal Žůrek (misaz):28.7.2015 19:48

to ale podle mě nebude fungovat, nevrátí to 555 řádek ale 1110 řádek. readLine přečte řádek a ty ho v jedné iteraci voláš 2× (v podmínce cyklu a při ukládání do proměnné s)

Nahoru Odpovědět  +1 28.7.2015 19:48
Nesnáším {}, proto se jim vyhýbám.
Avatar
Michal Žůrek (misaz):28.7.2015 19:51

a co to napsat jednoduše

int hleadanyRadek = 555;
for (int i = 0; i < hleadnyRadek - 1; i++) {
        if (reader.readLine() == null) {
                return null;
        }
}
return reader.readLine();
Nahoru Odpovědět 28.7.2015 19:51
Nesnáším {}, proto se jim vyhýbám.
Avatar
Odpovídá na Michal Žůrek (misaz)
Michal Žůrek (misaz):28.7.2015 19:53

i když ta podmínky v cyklu je zbytečná.... Po úpravě:

int hleadanyRadek = 555;
for (int i = 0; i < hleadnyRadek - 1; i++) {
        reader.readLine();
}
return reader.readLine();
Nahoru Odpovědět 28.7.2015 19:53
Nesnáším {}, proto se jim vyhýbám.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Jan Vargovský:28.7.2015 20:00
while(hledanyRadek-->0) reader.readLine();
return reader.readLine();

Otázka je, jak se chová stream v Javě, když už jsi na konci a pořád po něm něco chceš :)

 
Nahoru Odpovědět  +1 28.7.2015 20:00
Avatar
Odpovídá na Jan Vargovský
Michal Žůrek (misaz):28.7.2015 20:04

to je sice krátké, ale pak už nemůžeš pracovat s proměnnou hledanyRadek. Osobně takové řešení nemám moc rád.

Nahoru Odpovědět 28.7.2015 20:04
Nesnáším {}, proto se jim vyhýbám.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Jan Vargovský:28.7.2015 20:12

Já myslel, že zadání bylo jen získat daný řádek ze souboru.

 
Nahoru Odpovědět  +2 28.7.2015 20:12
Avatar
ronep
Člen
Avatar
ronep:3.9.2015 1:27

ok diky moc za mnoztvo napadou
a ano ide mi len o to nacitat ten dani riadok a nic viac ale asi mi nedoslo ktore z tich vsetkych rieseni je spravne tak viskusam vsetky :)
a je zaujimave ako tagmer vsade ste davali priamo riadok cislo 555 aj ked to bolo prve velke cislo co som natukal
jo a ten return je aky datovi tip ? alebo je to podla toho do akeho datoveho tipu ho necham vratit ?

 
Nahoru Odpovědět 3.9.2015 1:27
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 19 zpráv z 19.