2017-04-05 14 views
0

ファイルリーダーを使用してcsvファイルを読み取っています.csvファイルの2番目の列はrgb(255,255,255)などのrgb値ですが、csvファイルの列はコンマで区切ります。私はコンマdeliminatorを使用している場合、それは以下のように読まれますので、どのように私は、全体のRGB値を読んでください「RGB(255、」、コードは以下の貼り付けられます。ありがとう!csvファイルに格納されたrgb値をカンマ区切り文字で区切って

 FileReader reader = new FileReader(todoTaskFile); 
     BufferedReader in = new BufferedReader(reader); 

     int columnIndex = 1; 
     String line; 

     while ((line = in.readLine()) != null) { 
      if (line.trim().length() != 0) { 
       String[] dataFields = line.split(","); 
       //System.out.println(dataFields[0]+dataFields[1]); 
       if (!taskCount.containsKey(dataFields[columnIndex])) { 
        taskCount.put(dataFields[columnIndex], 1); 
       } else { 
        int oldCount = taskCount.get(dataFields[columnIndex]); 
        taskCount.put(dataFields[columnIndex],oldCount + 1); 
       } 
      } 

答えて

0
line = "rgb(25,255,255)"; 
    line = line.replace(")", ""); 
    line = line.replace("rgb(", ""); 
    String[] vals = line.split(","); 

はにヴァルスの値をキャスト整数、その​​後、あなたがそれらを使用することができ

0

ここでは、この操作を行うことができる方法である:。

Pattern RGB_PATTERN = Pattern.compile("rgb\\((\\d{1,3}),(\\d{1,3}),(\\d{1,3})\\)"); 

String line = "rgb(25,255,255)"; 
Matcher m = RGB_PATTERN.matcher(line); 
if (m.find()) { 
    System.out.println(m.group(1)); 
    System.out.println(m.group(2)); 
    System.out.println(m.group(3)); 
} 

ここ

\\d{1,3} => match 1 to 3 length digit 
(\\d{1,3}) => match 1 to 3 length digit and stored the match 

(または)はメタキャラクタですが、それをエスケープする必要があります。

+0

ありがとうございました!あなたのメソッドを使って動作します。しかし、円グラフをスタイルするためにrgb値を使用して、pie()チャートをプロットするには、group()をどのように呼びますか?ありがとう!私はコントローラを使用して、initialize()でreadメソッドとplotメソッドを呼び出していましたが、唯一間違っていたのは円グラフの色です。 –

+0

赤色の色を 'm.group(1)'、緑色の色を 'm.group(2)'、青色を 'm.group(3)' –

+0

とすると、m 。グループ();円グラフのスタイルを設定するinitialize()メソッドでは、m.group()は認識されません。 –

1

カスタムメソッドを使用してCSV入力を解析しないことを強くお勧めします。あなたのために特別なライブラリがあります。

@Ashraful Islamは「セル」(私はそれを再利用しました)の値を解析する良い方法を紹介しましたが、この「セル」の生の値を別のやり方で取得する必要があります。この図は、apache.commons.csvライブラリを使って行う方法を示しています。

package csvparsing; 

import org.apache.commons.csv.CSVFormat; 
import org.apache.commons.csv.CSVRecord; 

import java.io.FileReader; 
import java.io.IOException; 
import java.io.Reader; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class GetRGBFromCSV { 

    public static void main(String[] args) throws IOException { 
     Reader in = new FileReader(GetRGBFromCSV.class.getClassLoader().getResource("sample.csv").getFile()); 
     Iterable<CSVRecord> records = CSVFormat.DEFAULT.withFirstRecordAsHeader().parse(in); // remove ".withFirstRecordAsHeader()" 
     for (CSVRecord record : records) { 
      String color = record.get("Color"); // use ".get(1)" to get value from second column if there's no header in csv file 
      System.out.println(color); 

      Pattern RGB_PATTERN = Pattern.compile("rgb\\((\\d{1,3}),(\\d{1,3}),(\\d{1,3})\\)", Pattern.CASE_INSENSITIVE); 

      Matcher m = RGB_PATTERN.matcher(color); 
      if (m.find()) { 
       Integer red = Integer.parseInt(m.group(1)); 
       Integer green = Integer.parseInt(m.group(2)); 
       Integer blue = Integer.parseInt(m.group(3)); 
       System.out.println(red + " " + green + " " + blue); 
      } 
     } 

    } 

} 

これはおそらく、正規表現ベースのソリューションは、予期しない動作をするだろうカスタム有効なCSV入力です:

Name,Color 
"something","rgb(100,200,10)" 
"something else","rgb(10,20,30)" 
"not the value rgb(1,2,3) you are interested in","rgb(10,20,30)" 

あなたがあなたのカスタムを書くとき考慮に入れるのを忘れかもしれない多くのオプションがあります。 parser:引用符で囲まれた文字列、引用符で囲まれた区切り文字、引用符で囲まれた引用符、別の区切り文字(,または;)、複数の列など。第三者のcsvパーサーがあなたのために注意します。あなたは車輪を再発明すべきではありません。

+0

ありがとう!それは多くの助けになります! –

+0

[OK; - )](https://stackoverflow.com/help/someone-answers) –

関連する問題