Avatar
ronep
Člen
Avatar
ronep:

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:

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:

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:

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:

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š:

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ý:

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š:

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):

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š:

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
 
Nahoru Odpovědět 28.7.2015 19:33
Avatar
Odpovídá na Jan Vargovský
Martin Bartoš:

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):

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):

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):

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ý:
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):

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ý:

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:

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.