Java szukanie wartosci w kolumnie

Java szukanie wartosci w kolumnie
  • Rejestracja: dni
  • Ostatnio: dni
0

Anybody... :( ?

bogdans
  • Rejestracja: dni
  • Ostatnio: dni
0

Możesz przekazywać nazwę pliku jako parametr java TwojaKlasa nazwaPliku. Wtedy nazwa pliku jest w parametrze args metody main (dokładniej, w args[0]).
Mozesz spytać o nazwę pliku po uruchomieniu programu, np. tak.

Kopiuj
Console con = System.console();
String fileName = con.readLine("Podaj nazwe pliku: ");
Antoniossss
  • Rejestracja: dni
  • Ostatnio: dni
0

public static void main(String[] args)
Mówi Ci to coś?

bogdans
  • Rejestracja: dni
  • Ostatnio: dni
0

Mówi, nie rozumiem co chcesz mi zasugerować.

  • Rejestracja: dni
  • Ostatnio: dni
0

Dobra, trochę oczyściłem program chodź dalej w konsoli wysypuje mi błędy. Próbowałem już wszystkich importów. Pomóżcie, proszę:

[code]
package com.csvreader;
import java.io.*;
import java.util.Scanner;
import java.util.StringTokenizer;

public final class CSVTable {

public CSVTable(String title, String source) throws NumberFormatException {

InputStream is;
try {
    
        File f = new File(source);
        is = new FileInputStream(f);
    
    insertData(is);

}catch(IOException ioe) {
}

}

void insertData(InputStream is) throws FileNotFoundException, IOException, NumberFormatException {
Scanner scan = new Scanner(is);
String n = scan.toString();
String[][] line = new String[n.length()][13];
String line1;
int row =0;
int col =0;
while (scan.hasNextLine()) {
line1 = scan.nextLine();
StringTokenizer st = new StringTokenizer(line1, ";", false);
while (st.hasMoreTokens()) {
line[row][col] = st.nextToken();
col++;
}
col = 0;
row++;
}

       for (int i = 1; i < line.length; i++)
       {
           if(!line[i-1][2].equals(line[i][2])) {
               int b = Integer.parseInt(line[i-1][1]);
               int c = Integer.parseInt(line[i-1][2]);
               int d = Integer.parseInt(line[i][1]);
               int f = Integer.parseInt(line[i][2]);

                       String outputFile = "C:\\Documents and Settings\\Vieckov\\Pulpit\\Wynik\\wynik1.csv";
            boolean alreadyExists = new File(outputFile).exists();
            try {

CsvWriter nowy = new CsvWriter(new FileWriter(outputFile, true), ';');

nowy.write(line[i-1][0].substring(0, 19));
nowy.write(line[i-1][1]+" ("+Integer.toHexString(b)+")");
nowy.write(line[i-1][2]+" ("+Integer.toHexString(c)+")");
nowy.write(line[i-1][8]);
nowy.write(line[i-1][4]);
nowy.write(line[i][1]+" ("+Integer.toHexString(d)+")");
nowy.write(line[i][2]+" ("+Integer.toHexString(f)+")");
nowy.write(line[i][8]);
nowy.write(line[i][4]);
nowy.write(line[i][6]);
nowy.write(line[i][7]);
nowy.write(line[i][5]);
nowy.write(line[i][9]);
nowy.write(line[i][10]);
nowy.write(line[i][11]);
nowy.write(line[i][12]);
nowy.endRecord();
nowy.close();
} catch (NumberFormatException | IOException | NullPointerException e)
{
}
}
}

String imie;
Scanner odczyt = new Scanner(System.in);
imie = odczyt.nextLine();

System.out.println("podaj plik "+is);
}
public static void main(String args[]) throws IOException, NullPointerException, NumberFormatException {

try {
CSVTable frame = new CSVTable("input","X004402141929004_1334824654152.csv");
} catch (NumberFormatException | NullPointerException q) {
}
}
}
[/code]

W Netbeansie ładnie się kompiluje a w konsoli wysypuje następujące błędy:

CSVTable.java:51: error: cannot find symbol
CsvWriter nowy = new CsvWriter(new FileWriter(outputFile, true), ';');
^
symbol: class CsvWriter
location: class CSVTable
CSVTable.java:51: error: cannot find symbol
CsvWriter nowy = new CsvWriter(new FileWriter(outputFile, true), ';');
^
symbol: class CsvWriter
location: class CSVTable
2 errors

bogdans
  • Rejestracja: dni
  • Ostatnio: dni
0

Komunikat jest jednoznaczny, brakuje klasy CSVWriter. To nie jest standardowa klasa Javy, musisz ją umieścić w tym samy katalogu, w którym jest klasa CSVTable.
P.S. Ty nazywasz ten kod oczyszczonym? To jest jeden wielki śmieć.

  • Rejestracja: dni
  • Ostatnio: dni
0

Jestem w cholere początkujący dllatego więc to jest śmieć. Co mam wrzucić w tej nowej klasie CSVWriter. ?

bogdans
  • Rejestracja: dni
  • Ostatnio: dni
0

Skoro w NetBeans się kompiluje, to klasa CSVWriter istnieje. Może przypadkowo dodałeś do projektu w NetBeans jara, który zawiera te klasę.

  • Rejestracja: dni
  • Ostatnio: dni
0

ok, dodałem tą klasę do folderu z klasą CSVTable. Kompiluje się ale przy uruchomieniu z terminala wywala mi taki błąd:

Exception in thread "main" java.lang.NoClassDefFoundError: CSVTable (wrong name: com/csvreader/CSVTable)

Próbowałem coś z tą zmienną środowiskową ale nie wiem za bardzo jak. Plik .class jest w tym samym folderze. Polecenie java -cp . CSVTable.java nie działa

  • Rejestracja: dni
  • Ostatnio: dni
0

Skorzystałem z Waszej pomocy:
Wpierw
javac -cp lista_plików.jar NaszaKlasa.java

Skompilowało mi się i teraz:

javac -cp ./:lista_plikow.jar NaszaKlasa

i dalej wyskakuje ten błąd:

Exception in thread "main" java.lang.NoClassDefFoundError: CSVTable (wrong name: com/csvreader/CSVTable)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:480)

bogdans
  • Rejestracja: dni
  • Ostatnio: dni
0

Jeśli w definicji klasy jest deklaracja

Kopiuj
package com.cvsreader.CVSTable;

to klasa CVSTable musi być w podkatalogu com/cvsreader względem katalogu bieżącego (tego w którym wpisujesz polecenie java ...).

  • Rejestracja: dni
  • Ostatnio: dni
0

Jestem wdzięczny za pomoc ale mógłbyś mi wytłumaczyć jak debilowi bo próbuje cały dzien z tym walczyc i nic mi nie wychodzi...

  • Rejestracja: dni
  • Ostatnio: dni
0

Powiedzmy mam katalog moj/
w tym katalogu trzymam tego jara czyli javacsv.jar
i teraz w tym katalogu mam stworzyc katalog com/csvreader ?
czyli moj/csv/reader i tam wrzucić CSVTable. Ok
I jak to teraz skomplilować i później odpalić, czy z -cp czy bez
Robiłem to tak, że wyszedłem z katalogu w /moj zostawiłem .jar a w moj/com/csvreader zostawilem moja klase.
I teraz z poziomu moj/ kompiluje javac -cp ./:javacsv.jar CSVTable.java
I nie działa

Antoniossss
  • Rejestracja: dni
  • Ostatnio: dni
0

jeżeli podpinałeś w NB biblioteki to uruchamiając z konsoli program musisz wskazać ich położenie. Robi taką magię przełącznik -cp lub -classpath
Reasumując odpalasz w taki sposób:
java -cp względna_ścieżka_do_jara com.csvreader.CSVTable
jeżeli odpalasz spakowany program do jara to dodajesz tylko przełącznik -jar. Reszta taka sama
java -cp względna_ścieżka_do_jara -jar com.csvreader.CSVTable

Antoniossss
  • Rejestracja: dni
  • Ostatnio: dni
0

Odnośnie katalogów. Java ma to do siebie, że tak katalogi muszą mieć tą samą strukturę co katalogi. Tak więc bajtkod klasy pl.antoniossss.javax.mojaklasa musi być w pliku ./pl/antoniossss/javax/mojaklasa.class
Ta zasada działa w obie strony

  • Rejestracja: dni
  • Ostatnio: dni
0

ok, takie polecenie działa:
java -cp ./:javacsv-2.0.jar com.csvreader.CSVTable

Można to jakoś zrobić w linuksie żeby podawać tylko java nazwa_klasy (no i ewentualnie plik jako argument) ?

Antoniossss
  • Rejestracja: dni
  • Ostatnio: dni
0

Jeżeli pracujesz na linuxie i nie wiesz tego - zalecam windowsa
nie znając linucha ni w ząb - skrypt bash?
Btw jak dla mnie cały temat powinien być przeniesiony do neewbee

Antoniossss
  • Rejestracja: dni
  • Ostatnio: dni
0

lub jar oczywiscie

  • Rejestracja: dni
  • Ostatnio: dni
0

Dobra, mam nadzieję, że ostatnia sprawa i więcej nie będę Was męczył, chciałem wczytywać plik jako parametr więc zamiast linijki:
[code]
CSVTable = new CSVTable("input", X423423423423.csv);
[/code]

Dałem:
[code]
BufferedInputStream is = new BufferedInputStream(new FileInputStream(args[0]));
is.read();
System.out.print(is.read());
is.close();
[/code]

Czyta mi plik na jako parametr ale nie wypluwa pliku wynikowego znajdującego się w InsertData. Coś trzebba dodać w tym main jeszcze tylko nie wiem co.

  • Rejestracja: dni
  • Ostatnio: dni
0

Takie coś czyta mi plik jako parametr ale nic nie wypluwa
[code]
public static void main(String[] args) throws IOException, NullPointerException, NumberFormatException {

try {

BufferedInputStream is = new BufferedInputStream(new FileInputStream(args[0]));


//CSVTable frame = new CSVTable("input", "X004402141929004_1334824654152.csv");

} catch (NumberFormatException | NullPointerException | FileNotFoundException q) {
System.out.printf("plik" + args[0] + "nie istnieje");
System.exit(1);
}
}
}
[/code]

Trzeba dodać coś takiego jak StreamOutput i podać klase jaką ma uruchamić czy nie bardzo ?

Antoniossss
  • Rejestracja: dni
  • Ostatnio: dni
0

A poprzednio podawałeś gdzie miał Ci wynik zapisywać?
No to w tym samym miejscu wstaw drugi argument....

  • Rejestracja: dni
  • Ostatnio: dni
0

Poprzednio w void insertData po prostu było to:

CsvWriter nowy = new CsvWriter(new FileWriter(outputFile, true), ';'); więc jak dodać następny argument.

Antoniossss
  • Rejestracja: dni
  • Ostatnio: dni
0

No masz przecież outputFile nie ?
Czy mi się wydaje, czy Ty bezmyślnie kopiowałeś coś co wygrzebałeś w necie?

Antoniossss
  • Rejestracja: dni
  • Ostatnio: dni
0

Polecam odwiedzenie strony SUN'a i rozpoczęcie wertowania javowych tutoriali odnośnie IO, sieci itd itp (POMIŃ GUI itp!)

  • Rejestracja: dni
  • Ostatnio: dni
0

No nie mam OutputFile. A co do kopiowanie to nie, pisałem sam ale to mój pierwszy program więc sklejałem po 1, 2 linijki z różnych źródeł to co przeczytałem w necie więc wyszedł śmieć jak cholera.

Antoniossss
  • Rejestracja: dni
  • Ostatnio: dni
0

przecież to jest string.... a args to tablica stringów........ args[1] będzie drugim argumentem...... podaj tam ścieżkę do pliku wynikowego...

  • Rejestracja: dni
  • Ostatnio: dni
0

W sumie nie kumam dalej ale będę musiał poczytać i się tego nauczyć.... Dzięki wielkie jeszcze raz za poświęcony czas.

Antoniossss
  • Rejestracja: dni
  • Ostatnio: dni
0

spodziewałem się tego
CsvWriter nowy = new CsvWriter(new FileWriter(args[1], true), ';'); więc jak dodać następny argument.
ucz się ucz....

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.