Przeszukiwanie pliku CSV

0

Witajcie, mam problem ... Chciałbym żeby plik CSV wg wzoru:
1 ; jakiś_adresIP1
2 ; jakiś_adresIP1
3 ; jakiś_adresIP1
4 ; jakiś_adresIP1
5 ; jakiś_adresIP1

Został wczytany (to mi się udało) , ale do tego po wybraniu odpowiej wartości (podawanej z klawiatury) pingował odpowiadający mu w linii adres IP. Dałoby radę coś takiego wyskrobać ? :)

Jak na razie mam taki kod:

import java.io.BufferedReader;
import java.io.FileReader;

import javax.swing.*;



public class Wczytaj_CSV {

public static void main(String[] args) throws Exception {
	
	String txt; //deklaracja zmiennej tekstowej
	txt = JOptionPane.showInputDialog("Podaj numer który ma zostać spingowany:");
	int n = Integer.parseInt(txt);
	  
      String splitBy = ";"; //rozpoznanie w pliku
      BufferedReader test = new BufferedReader(new FileReader("test.csv")); //otwarcie pliku i utworzenie bufora
      String line;
      System.out.println("WCZYTANIE PLIKU:");
	while((line = test.readLine()) != null){ //wczytuj dane aż do momentu gdzie linia będzie pusta
           String[] tab = line.split(splitBy); // tablica 
          // System.out.println(tab[0] +" * " + tab[1]); //dodawanie indeksów tablicy do pliku
           
         
           
      }
      test.close(); //koniec

  }
}

Pozdrawiam Was i liczę na jakąś odpowiedź :)

0

Jeśli dobrze rozumiem pytanie:

  1. Wczytaj dane z pliku do Map<Integer, String>
  2. pinguj mapa.get(numerek_z_klawiatury)
0

Mapa get mnie nie urządza, bo podanie numeru musi być z klawiatury , w sensie interaktywnie np przy wyrzuceniu okienka jak w kodzie powyżej.

0

A co ma piernik do wiatraka? o_O

0

A jak mogę wczytać plik CSV do mapy?

1

Jak faktycznie masz tam takie śmieszne spacje w tym csv to elegancko tak:

        Map<String, String> IPs = Files.readAllLines(Paths.get("input.csv")).stream()
                .map(line -> line.split(";"))
                .collect(Collectors.toMap(
                        array -> array[0].trim(),
                        array -> array[1].trim()
                ));

I teraz w tym swoim kodzie robisz sobie:

String selected = JOptionPane.showInputDialog("Podaj numer który ma zostać spingowany:");
String IP = IPs.get(selected);

No i reszta tego tego kodu to pewnie:

InetAddress inet = InetAddress.getByName(IP);
System.out.println(inet.isReachable(5000));
0

Coś ta część z mapą mi nie paca ...

0

Java 8.

0

.map(line -> line.split(";"))
Syntax error ? Prawdopodbnie chodzi coś o "-" ...

0

Ale java 8 ci wypluwa tu jakiś syntax error? Bo u mnie się kompiluje bez problemu... Bez javy 8 to się nie skompiluje...

0

Tak, właśnie się dziwię, bo rano działałem jeszcze na Javie 7 i wgl pierwsza linia nawet się nie chciała skompilować. Po wgraniu Javy 8 przeszło normalnie ale zatrzymało się na wskazanym przeze mnie fragmencie... Jak możesz to daj mi linka do tej Javy, bo może coś źle pobrałem, ale nawet w pliku Javy "about Java " mam Version 8 update 20... Chyba że pokopałem coś przy kodzie, ale też raczej nie , bo po prostu kopiowałem kod źródłowy który mi podałeś powyżej ...

0
import javax.swing.*;
import java.io.IOException;
import java.net.InetAddress;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Map;
import java.util.stream.Collectors;

public class Main {

    public static void main(String[] args) throws IOException {
        Map<String, String> IPs = Files.readAllLines(Paths.get("input.csv")).stream()
                .map(line -> line.split(";"))
                .collect(Collectors.toMap(
                        array -> array[0].trim(),
                        array -> array[1].trim()
                ));
        String selected = JOptionPane.showInputDialog("Podaj numer który ma zostać spingowany:");
        String IP = IPs.get(selected);
        InetAddress inet = InetAddress.getByName(IP);
        System.out.println(inet.isReachable(5000));
    }
}

To jest cały kod. Kompiluje sie i działa u mnie pod jdk1.8.0_05

0

A powiedz mi jakiego kompilatora używasz? Może w nim jest problem... Ja korzystam z Eclipsa.

No wiadomo o co chodzi ... Po prostu sądzę, że może konfiguracja Eclipsa zawodzi.

0

No to pokaż log z kompilacji.

0

Już się udało, zainstalowanie nowego Eclipsa pomogło, tylko niestety efekt nie jest taki jak oczekuje. Wartość zwracana to true lub false , a ja chce by po podaniu numeru pingował to co jest "obok" pierwszej kolumny CSV (z tej samej linii) .....

0

OMG chłopie. Matka wie że ćpiesz? Zamiast bezmyślnie kopiować kod (którego jeszcze nie umiesz skompilować) może spróbujesz ZROZUMIEĆ co on robi? Wyobraź sobie że ten kod pinguje podany adres i zwraca czy jest on osiągalny czy też nie... Wcale nie napisałeś po co chcesz pingować więc zalożyłem że chcesz sprawdzić czy serwer działa czy nie.

0

Nie powiedziałem , że nie wiem do czego służy program, tylko że cel nie jest taki jak zakładałem :
Chcę by program sprawdził czy podana wartość z klawiatury jest w pliku , i jeśli jest to pingowany jest adres z tej samej linii (druga kolumna).

0

No ale kod generalnie robi właśnie to. W czym rzecz?

1

:D
To może coś takiego sobie dorzuć:

Runtime rt = Runtime.getRuntime();
rt.exec("cmd.exe /c start cmd /k \""+ipDoPingu+"\"");
0

Z programem sobie poradziłem, a powiedzcie mi ... Przy wyeksportowaniu projektu do *.jar i odpaleniu go program po prostu się nie otwiera... Czy jest jakiś sposób by z całego projektu zrobić 1 plik ? Próbowałem eksportu do jar i executable jar i niestety nic... Po odpaleniu jara nic się nie dzieje.

0

java -jar twojjar.jar i przeczytaj komunikat błędu...

0

Naprowadziłeś mnie :) A powiedz mi jeszcze - czy istnieje możliwość odpalenia pliku nie mając JRE? W sensie że np przerobienia jar'a na exe by nie wymagał JRE? Polecasz jakieś narzędzie? Próbowałem Launch4J , ale chyba nici z tego. W tym wszystim chodzi o to, że w miejscu gdzie odpalam program nie mam Javy... I raczej mieć nie będę ...

0

To napisz to w innym języku w takim razie? ;]

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