2016-12-17 30 views
0

私は学校のプロジェクトに取り組んでおり、CSVファイルを使用可能な形式にインポートしてフォーマットする方法を考えています。 CSVには最初の列にムービー名が含まれ、行には上映時間が表示されるため、このような表示になります。列の長さが異なるCSVファイルをインポートする方法

MOVIE1、午後7時、午後8時、21時、22時

MOVIE2、午後5時、午後8時

movie3、午後3時、午後7時、私は独自の配列にそれぞれの行を分割したいと思います午後10時

、おそらく配列のarraylist?私は本当にどこで始めるべきか知っていないので、どんなポインタも高く評価されます。

好ましくは、外部ライブラリを使用しないでください。

+0

_ "外部ライブラリを使用したくありません" _ - なぜホイールを改造するのですか? CSV解析には「面白い」微妙な要素があり、OpenCSVのようなライブラリを使用すると、すでに作業が完了しています。また、この質問は、StackOverflowのトピック外です。 [なぜ誰かが私を助けることができますか?実際の質問ではありませんか?](http://meta.stackoverflow.com/q/284236/18157)また、このサイトを効果的に使用する方法については、[help]にアクセスして[ask]をお読みください。 –

答えて

0

opencsvを使用してCSVファイルを読み取り、各String []をArrayListに追加できます。 opencsv'sウェブサイトのFAQセクションに例があります。

編集:外部ライブラリを使用しない場合は、BufferedReaderを使用してCSVを読み取り、行をカンマで分割できます。

BufferedReader br = null; 
    try{ 
     List<String[]> data = new ArrayList<String[]>(); 
     br = new BufferedReader(new FileReader(new File("csvfile"))); 
     String line; 
     while((line = br.readLine()) != null){ 
      String[] lineData = line.split(","); 
      data.add(lineData); 
     } 
    }catch(Exception e){ 
     e.printStackTrace(); 
    }finally{ 
     if(br != null) try{ br.close(); } catch(Exception e){} 
    } 
0

私は以下のようなlistとしてMapた映画のキーとしての名前とタイミングとなるだろう:それはcsvファイルを読んで、このマップに値を入れます

Map<String, List<String>> movieTimings = new HashMap<>(); 

。キーがすでに存在する場合は、値をリストに追加するだけです。あなたは、例えば、エントリが存在するかどうかを確認するためにMapcomputeIfAbsent方法(Javaの8)を使用することができます。:

public static void main(String[] args) { 
    Map<String, List<String>> movieTimings = new HashMap<>(); 
    String timing = "7pm";//It will be read from csv 
    movieTimings.computeIfAbsent("test", s -> new ArrayList<>()).add(timing); 
    System.out.println(movieTimings); 
} 

ファイルが読み込まれたら、これはあなたのマップを移入します。ファイルの読み取りに関する限り、BuffferedReaderまたはOpenCSV(プロジェクトでサードパーティのライブラリを使用できる場合)を使用できます。

+0

とにかくそれを地図の中に入れようと思っていたので、これは大変なことだと思う。 – zpersi

+0

私はbr = new BufferedReader(新しいFileReader( "Book1.csv"))を持っています。 – zpersi

+0

だから私は持っている br =新しいBufferedReader(新しいFileReader( "Book1.csv")); 文字列のタイミングにどのように入れればいいですか? – zpersi

0

私はUnivocityに所属していませんが、Java CSVパーサーは素晴らしいと無料です。私が質問をしたとき、開発者の一人がすぐに私に戻ってきました。 http://www.univocity.com/pages/about-parsers

行を読み込んだ後、フィールドを繰り返し表示します。ムービーの名前は常にそこにあり、ムービーの時間は少なくとも1つであることを知っているので、arraylistsのarraylistを含む好きな方法で設定できます(両方とも可変長配列です)。

フィールドを引用符で囲まずに正しく動作します(ムービー名にアポストロフィやカンマがある場合に必要です)。私が解決した問題では、すべての行に同じ数の列がありましたが、ファイルを解析する前に列の数がわからず、各ファイルには異なる数の列と列名が付いていました。

関連する問題