Plik tekstowy ladowany to Arrays

Odpowiedz Nowy wątek
2016-03-25 19:25
JavaArrays
0

Witam

Posiadam plik tekstowy ktory ma w kazdej lini po 7 slow odzielonych spacja.
Chcial bym zaladowac ten plik do Arrays w javie w taki sposob ze 1 slowa z lini beda w 1 kolumnie 2 slowa beda w 2 kolumnie itd.

uzywalem tego kodu:


  Scanner inFile1 = new Scanner(new File("KeyWestTemp.txt")).useDelimiter(",\\s*");

    List<String> temps = new ArrayList<String>();

    // while loop
    while (inFile1.hasNext()) {
      // find next line
      token1 = inFile1.next();
      temps.add(token1);
    }
    inFile1.close();

    String[] tempsArray = temps.toArray(new String[0]);

Niestety ten kod laduje wszystko w 1 arrays.

Dziekuje z gory za <ort>wzkazowki/</ort> pomoc.

edytowany 2x, ostatnio: bogdans, 2016-12-13 18:26

Pozostało 580 znaków

2016-03-25 19:36
eL
0

Skoro jest tak regularnie podzielony to robisz tak:


 String[] wiersz = inFile1.next().split(" ");

A potem robisz jakiegoś for'a który przepisze wiersz na kolumnę String[][].

Ps. używaj tagów.

edytowany 1x, ostatnio: eL, 2016-03-25 19:36

Pozostało 580 znaków

2016-03-25 21:36
JavaArrays
0

Dziekuje za szybkka odpwiedz jednak ze niewiele mi ona mowi. Mozna prosic o jakas bardziej szczegolowa?

  • probowalem loopem zczytac slowo po slowie i zapisywac je jako string a pozniej przeniesc to jakos do arrays ale niestety nie udalo mi sie, jest to w ogole mozliwe?

Pozostało 580 znaków

2016-03-25 22:09
0
  1. Wstawiaj kod w znaczniki <code class="java"></code>
  2. Zmień sposób czytania. Używając delimitera \\s* zacierasz różnicę między spacjami i tabulatorami, a znakiem nowego wiersza.
            Scanner inFile1 = new Scanner(new File("Dupa.txt"));
            while (inFile1.hasNextLine()) 
            {               
                String[] wordsInLine = inFile1.nextLine().split(" ");
                ...
            }
            inFile1.close();
  3. Nie chcę mi się domyślać co nazywasz kolumnami w Arrays, więc więcej kodu nie podam.

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 1x, ostatnio: bogdans, 2016-03-25 22:10

Pozostało 580 znaków

2016-03-25 22:34
3

Scanner to już przeżytek, zwłaszcza do małych plików.

Spróbuj tak:

String[][] array = Files.lines(Paths.get("sciezkaDoPliku.txt"))
                .map(s -> s.split(" "))
                .toArray(String[][]::new);

Pozostało 580 znaków

2016-03-28 18:05
JavaArrays
0

Witam ponownie, rozwiazaniem mojego problemu a zarazem rozpoczeciem kolejnego byly arraylists.

 while (fileIn.hasNext()) {

                         int Number = fileIn.nextInt(); 
                         LNumber.add(Number);
                         String Standard = fileIn.next(); 
                         LStandard.add(Standard);

Dzieki temu plik tekstowy zostal zaladowany do arrays tak jak chcialem. Problem jaki powstal to nadpisanie pliku z ktorego te dane zostaly wziete. W konsoli informacje wyswietlaja sie prawidlowo ale jezeli probuje je zapisac do pliku z ktorego je wzialem to plik sie kasuje.
kod :

 for(int i = 0; i < LNumber.size() +  LStandard.size(); i++
System.out.print(" "+ (LNumber.get(i)).toString() + " " + (LStandard.get(i)).toString())
}

Ktos mogl by cos poradzic?

Pozostało 580 znaków

2016-03-28 22:31
0
JavaArrays napisał(a):

Dzieki temu plik tekstowy zostal zaladowany do arrays tak jak chcialem. Problem jaki powstal to nadpisanie pliku z ktorego te dane zostaly wziete. W konsoli informacje wyswietlaja sie prawidlowo ale jezeli probuje je zapisac do pliku z ktorego je wzialem to plik sie kasuje.
kod :

for(int i = 0; i < LNumber.size() +  LStandard.size(); i++
System.out.print(" "+ (LNumber.get(i)).toString() + " " + (LStandard.get(i)).toString())
}

Ktos mogl by cos poradzic?

To daj kod w którym zapisujesz to do pliku, może jakiś błąd masz;)

btw,
i < LNumber.size() + LStandard.size()
LNumber.get(i)
nie leci tu żaden indexOutOfBounds czy cos?:p

edytowany 1x, ostatnio: Madlova, 2016-03-28 22:31

Pozostało 580 znaków

2016-03-29 09:09
0

jezeli probuje je zapisac do pliku z ktorego je wzialem to plik sie kasuje

Przed zapisem musisz zamknąć plik, z którego czytałeś i otworzyć go na nowo.
P.S. jak napisał wyżej @Madlova, kod

LNumber.get(i)).toString() + " " + (LStandard.get(i)).toString()

musi rzucić wyjątkiem (chyba, że obie kolekcje są puste). Jeśli tego wyjątku nie widzisz, tzn,. że całkowicie skopałeś obsługę błędów w swoim programie.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

2016-03-30 00:33
JavaArrays
0

Witam ponownie sprawe udalo mi sie rozwiazac taka metoda

try (Writer zapisz = new BufferedWriter(new OutputStreamWriter(
                  new FileOutputStream("lol.txt"), "utf-8"))) {
  • loop do tego
    for(int i = 0; i <  + LNumber.size() + LStandard.size(); i++) {
    writer.Zapisz (" "+ (LNumber.get(i)).toString() + " " + (LStandard.get(i)).toString()); 
    }
    }

    Plik sie zapisuje ladnie dokladnie 44 pozycje ale zaraz po tym w consoli mam blad

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 44, Size: 44
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at Reservation.main(Reservation.java:157)

Writer.zapisz to linia 157

rozumiem ze to oznaca ze java probuje dostac sie do pozycji 44 ale jej sie to nie udaje bo w teori jest ona pusta. Problem w tym ze chwile wczesniej zapisala to bez zadnego problemu do pliku tekstowego.

Ps wiem ze arrays sie zaczynaja od 0, a jedyne rozwiazanie ktore znalazlem a nie dziala bo juz bylo zrobione to zmiana <= na < .

Ktos ma jakis pomysl?

Dziekuje

Pozostało 580 znaków

2016-03-30 08:51
0

Z odczytującego kodu, który podałeś wcześniej wynika, że LNumber.size() == lStandard.size(). Zatem:

for(int i = 0; i <  + LNumber.size(); i++) 

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

2016-03-30 09:18
0

I znowu - używajcie NIO, a nie starych rzeczy.

        String[][] newArray = {{"a", "b", "c"}, {"d", "e", "f"}};

        List<String> linesToWrite =
                Stream.of(newArray)
                        .map(sArray -> Arrays.asList(sArray))
                        .map(list -> String.join(" ", list))
                        .collect(Collectors.toList());

        Files.write(
                Paths.get("c:/test.txt"),
                linesToWrite,
                StandardOpenOption.CREATE);

EDIT: poprawka z Stream.of().collect -> Arrays.asList. Na pewno ładniej to wygląda.

edytowany 2x, ostatnio: wartek01, 2016-03-30 09:48
Nie zgadzam się z takim podejściem. Autor używa jakiejś przestarzałej metody i robi w niej błąd. Więcej pożytku będzie miał ze wskazania błędu niż z podania nowej metody, której być może zupełnie nie rozumie. - bogdans 2016-03-30 10:03

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0