2012-06-26 17 views
5

मैं एक सीएसवी पार्सर पर काम कर रहा हूं, मैं हेडर और बाकी सीएसवी फ़ाइल को अलग से पढ़ना चाहता हूं। सीएसवी पढ़ने के लिए मेरा कोड यहां है।सीएसवी पार्सर रीडिंग हेडर

वर्तमान कोड सीएसवी फ़ाइल में सबकुछ पढ़ता है, लेकिन मुझे हेडर अलग से पढ़ने की जरूरत है। कृपया इसके बारे में मेरी मदद करें।

public class csv { 

private void csvRead(File file) 
{ 
    try 
    { 
    BufferedReader br = new BufferedReader(new FileReader(file)); 
    String strLine = ""; 
    StringTokenizer st = null; 
    File cfile=new File("csv.txt"); 
    BufferedWriter writer = new BufferedWriter(new FileWriter(cfile)); 
    int tokenNumber = 0; 

    while((strLine = br.readLine()) != null) 
    { 
      st = new StringTokenizer(strLine, ","); 
      while(st.hasMoreTokens()) 
      { 

        tokenNumber++; 
        writer.write(tokenNumber+" "+ st.nextToken()); 
        writer.newLine(); 
      } 


      tokenNumber = 0; 
      writer.flush(); 
    } 
} 

    catch(Exception e) 
    { 
     e.getMessage(); 
    } 
} 
+1

यदि आप शीर्ष फ़ाइल से शीर्षकों को पढ़ने को अलग करना चाहते हैं, तो एक विधि है जो केवल पहली पंक्ति को संभालने वाली है, और दूसरी विधि जो फ़ाइल में अन्य सभी पंक्तियों को संभालती है। –

उत्तर

3

क्या आपने OpenCSV पर विचार किया है?

यहां पिछला सवाल ...

CSV API for Java

ऐसा लगता है कि काफी आसानी से हैडर बाहर विभाजित कर सकते हैं ...

String fileName = "data.csv"; 
CSVReader reader = new CSVReader(new FileReader(fileName)); 


// if the first line is the header 
String[] header = reader.readNext(); 

// iterate over reader.readNext until it returns null 
String[] line = reader.readNext(); 
5

Commons CSV के उपयोग पर विचार करें। यह पुस्तकालय RFC 4180 - Common Format and MIME Type for Comma-Separated Values (CSV) Files के अनुसार लिखा गया है। क्या इस तरह के लाइनों को पढ़ने के लिए संगत है:

"aa,a","b""bb","ccc" 

और उपयोग काफी सरल है, वहाँ सिर्फ 3 वर्गों है, और एक छोटा सा नमूना अनुसार प्रलेखन:

एक csv-स्ट्रिंग के रूप में टैब होने की पार्सिंग एक वैकल्पिक मूल्य encapsulator के रूप में विभाजक, ' "', और टिप्पणियों के साथ '#' से प्रारंभ:

CSVFormat format = new CSVFormat('\t', '"', '#'); 
Reader in = new StringReader("a\tb\nc\td"); 
String[][] records = new CSVParser(in, format).getRecords(); 

और यह पारसर्स अतिरिक्त आपको मिल स्थिरांक के रूप में पहले से ही उपलब्ध:

  • डिफ़ॉल्ट - मानक अल्पविराम से अलग प्रारूप के रूप में आरएफसी 4180.
  • एक्सेल द्वारा परिभाषित - एक्सेल फ़ाइल स्वरूप (मूल्य परिसीमक के रूप में एक अल्पविराम का उपयोग)।
  • MYSQL - डिफ़ॉल्ट MySQL प्रारूप आउटपुट और लोड डेटा इन्फ्लू संचालन में चयन द्वारा उपयोग किया जाता है। टीडीएफ - टैबलेट सीमित प्रारूप।
3

हमारे पास CSVFormat में उपलब्ध हैडर() विधि है। यदि आप इस विकल्प का उपयोग करते हैं तो आप हेडर का उपयोग कर फ़ाइल को पढ़ने में सक्षम होंगे।

CSVFormat format = CSVFormat.newFormat(',').withHeader(); 
Map<String, Integer> headerMap = dataCSVParser.getHeaderMap(); 

आपको सभी शीर्षलेख देगा।

public class CSVFileReaderEx { 
    public static void main(String[] args){ 
     readFile(); 
    } 

    public static void readFile(){ 
     List<Map<String, String>> csvInputList = new CopyOnWriteArrayList<>(); 
     List<Map<String, Integer>> headerList = new CopyOnWriteArrayList<>(); 

     String fileName = "C:/test.csv"; 
     CSVFormat format = CSVFormat.newFormat(',').withHeader(); 

      try (BufferedReader inputReader = new BufferedReader(new FileReader(new File(fileName))); 
        CSVParser dataCSVParser = new CSVParser(inputReader, format);) { 

      List<CSVRecord> csvRecords = dataCSVParser.getRecords(); 

      Map<String, Integer> headerMap = dataCSVParser.getHeaderMap(); 
       headerList.add(headerMap); 
       headerList.forEach(System.out::println); 

      for(CSVRecord record : csvRecords){ 
       Map<String, String> inputMap = new LinkedHashMap<>(); 

       for(Map.Entry<String, Integer> header : headerMap.entrySet()){ 
        inputMap.put(header.getKey(), record.get(header.getValue())); 
       } 

       if (!inputMap.isEmpty()) { 
        csvInputList.add(inputMap); 
       } 
      } 

      csvInputList.forEach(System.out::println); 

      } catch (Exception e) { 
      System.out.println(e); 
      } 
    } 
} 
+0

अच्छा, वास्तव में अच्छा है –

संबंधित मुद्दे