2016-01-22 2 views
0

Обновленный код. Эта программа должна взять CSV-файл и разделить его на TSV-файлы в школе, но я не заставляю его работать. Я получаю это правильно создавать файлы, но только один имеет какие-либо данные в нем ...CSV to tab с разделителем java в командной строке

public class Student implements Comparable<Student>{ 

    public int id = 0; 
    public String name = ""; 
    public String school = ""; 


    public Student(int id, String name, String school){ 

     this.id = id; 
     this.name = name; 
     this.school = school; 
    } 

    public String toString(){ 
     return id+"\t"+name+"\t"+school; 
    } 

    @Override 
    public int compareTo(Student o) { 
     return this.school.compareTo(o.school); 
    } 
} 

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.Collections; 


public class ReadCSV { 

    public static String CSV_FILE_PATH = "/Users/eringray/Desktop/csvtotab/input.csv"; 

    public static void main(String[] args){ 

     try { 

      BufferedReader br = new BufferedReader(new FileReader(CSV_FILE_PATH)); 
      BufferedWriter bw = new BufferedWriter(new FileWriter(CSV_FILE_PATH + ".tsv")); 

      ArrayList<Student> list = new ArrayList<Student>(); 

      String line = ""; 
      while((line = br.readLine()) != null) { 
       String[] values = line.split(","); 

       if(values.length == 3) { 
        String idAsString = values[0]; 
        String name = values[1]; 
        String school = values[2]; 

        int id = Integer.parseInt(idAsString); 

        Student s = new Student(id, name, school); 

        list.add(s); 
       } 
      } 

      Collections.sort(list); 

      String currentSchool = ""; 
      for(int i = 0; i < list.size(); i++){ 
       Student stu = list.get(i); 
       if(currentSchool != stu.school){ 
        currentSchool = stu.school; 
        bw = new BufferedWriter(new FileWriter(CSV_FILE_PATH + stu.school + ".tsv")); 
       } 

       String lineText = stu.toString(); 
       bw.write(lineText); 
       bw.newLine(); 
      } 

      br.close(); 
      bw.close(); 

     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 
+0

Вам действительно нужно использовать java для этого, используя утилиту linux 'tr' быстрее, так как это может сделать' tr ',' '\ t'', чтобы заменить их очень быстро – Ferrybig

+0

Да, мне нужно использовать java, это задание, над которым я работаю. благодаря! – Rassisland

+0

У вас уже есть код? пожалуйста, опубликуйте его, если да. Что вам нужно, это функция замены класса string: https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#replace(char,%20char) –

ответ

2

Первое, что вам нужно сделать, это чтение входного файла. Думаю, вам нужно прочесть его по строкам (зависит от структуры файла).

https://docs.oracle.com/javase/7/docs/api/java/io/FileInputStream.html

https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html

Следующий шаг для того чтобы отделить данные и сортирует их в школе (если я хорошо понял ваш вопрос).

Для этого нужно разделить данные и создать класс для хранения информации:

https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String)

public Class Student{ 
    public String name = ""; 
    .... 

    public Student(String name, String school, ...){} 
} 

Когда вы создали объект Student для каждого студента в списке, вы должны сортировать учеников по школе:

Вы можете реализовать сравнимые и использовать Collection.sort().

https://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html

Последняя вещь, чтобы напечатать вывод, для этого вы должны переопределить метод ToString класса студентов:

public String toString(){ 
    return this.id+"\t"+this.name+"\t"+this.school; 
} 

и итерацию через в список ваших студентов и вызвать ToString метод:

System.out.println(students.get(i).toString()); 

РЕДАКТИРОВАТЬ:

Если вам нужен вывод в файле, а не в консоли, просто используйте fileoutputStream и bufferedwriter для вывода вывода метода toString в файл.

+0

Удивительный! Это именно то, что я искал! Я дам этот выстрел и могу вернуться с несколькими небольшими вопросами. Еще раз спасибо! – Rassisland

+0

Я работаю над этим в выходные, но боролся. Я добавил то, что у меня до сих пор, к моему оригинальному сообщению. Для следующего шага я должен создать новый файл класса java? Как я могу получить это, чтобы работать с моим исходным кодом?Извините за новички, я только начал изучать Java на прошлой неделе, так что я совсем позади! – Rassisland

+0

Вы используете идеал или текстовый редактор? –

Смежные вопросы