Avatar
mnauik
Člen
Avatar
mnauik:

Mám wordlist (seznam anglických slov) a chci rozdělit slovíčka z něj do souborů, kde v každém souboru budou slova určité délky (ve wordlist-1 jen znaky, ve wordlist-2 dvouznaková slova, atd...)

Řešil jsem to způsobem, že si ta slovíčka nahraju do ArrayListu a pak z něj překopíruju do souboru podle délky slova způsobem, že v každém kroku cyklu otevřu soubor podle délky slova, zapíšu do něj to slovo a zase ho zavřu.

Jenže je to pomalejší než jsem očekával, takže prosím o radu, co zlepšit, radši bych byl, kdyby program byl rychlý, tak když bude program o pár řádku delší, není to problém.

Napadla mě ještě varianta, že bych si ty slovíčka v ArrayListu setřídil podle délky a pak je nahrával postupně do souborů a tím bych nemusel pořád u každého slova otevírat a zavírat soubory (outputy), ale otevřel bych jeden soubor například wordlist-15 a nahrál tam všechna slova o délky 15, zavřel, pak na wordlist-14...atd.

Zatím to řeším takto:

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.Scanner;

/**
 *
 * @author Mnauik
 */
public class MainClass {

    public static void main(String[] args) {
        ArrayList<String> retezec = new ArrayList<>();
        try {
            Scanner input = new Scanner(new File("wordlist.txt"));

            while (input.hasNext()) {
                retezec.add(input.nextLine());
            }
            String tmp;
            for (int i = 0; i < retezec.size(); i++) {
                tmp = retezec.get(i);
                System.out.println(i+". slovo ("+tmp+") ze "+retezec.size()+" ("+(double)(i*100)/retezec.size() +" %)");

                try (BufferedWriter out = new BufferedWriter(new FileWriter("wordlist-" + tmp.length() + ".txt",true))) {

                    out.write(tmp);
                    out.newLine();
                    out.close();
                } catch (Exception e) {
                    System.out.println("Chyba v souboru");
                }
            }
        } catch (Exception e) {
            System.out.println("Naka chyba");
        }
    }
}
Odpovědět 28.12.2013 0:00
minusuj mě, ale zdůvodni to ;)
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na mnauik
Jan Vargovský:

Rozděl si je do listů a pak otevři soubor a nahrej je tam všechny. Otvírání a zavírání souboru není moc rychlé. Nejlepší by bylo, kdyby sis to dal do databáze... Proč to chceš mít vůbec ve více souborech?

 
Nahoru Odpovědět 28.12.2013 0:12
Avatar
mnauik
Člen
Avatar
mnauik:

"Rozděl si je do listů a pak otevři soubor a nahrej je tam všechny."
Zajímavé, to mě nenapadlo. Děkuju

"Proč to chceš mít vůbec ve více souborech?"
Chtěl jsem napsat program, který by z určitých písmen sestavoval slova a začal by u slov s nejmenší délkou. Takhle jsem to chtěl seřadit. Možná by to šlo i BubbleSortem, ale to by asi bylo moc pomalý. Teď ale vidím, že jsem si stejně moc nepomoh.

Nahoru Odpovědět 28.12.2013 0:20
minusuj mě, ale zdůvodni to ;)
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.