2013-08-19 2 views
6

में सीएसवी फ़ाइल पढ़ने के दौरान पहली पंक्ति छोड़ें अरे दोस्तों मैं एक .csv फ़ाइल पढ़ने के लिए एक पार्सर कोड लिख रहा हूं और इसे एक्सएमएल पर पार्स कर रहा हूं। यह मेरे पास कोड है और यह ठीक काम करता है सिवाय इसके कि मैं इसे फ़ाइल में पहली पंक्ति छोड़ना चाहता हूं। तो मैं एक HashMap स्थापित करने का फैसला, लेकिन यह काम करने के लिए प्रतीत होता है:जावा

for (int i = 0; i < listOfFiles.length; i++) { 
     File file = listOfFiles[i]; 
     if (file.isFile() && file.getName().endsWith(".csv")){ 

      System.out.println("File Found: " + file.getName());//Prints the name of the csv file found 

      String filePath = sourcepath + "\\" + file.getName(); 

      BufferedReader br = new BufferedReader(new FileReader(file)); 


String line; 
int n = 1; 
Map<Integer,String> lineMap = new HashMap<Integer,String>(); 
int k=2; 
while ((line = br.readLine()) != null) { 
    System.out.println(n + " iteration(s) of 1st While Loop"); 

        lineMap.put(k, line); 

    fw.write("   <ASSET action=\"AddChange\">\n"); 
    fw.write("    <HOSTNAME>\n"); 
    hostName=line.substring(0, line.indexOf(",")); 
    fw.append(hostName); 
    fw.write("</HOSTNAME>\n"); 
    fw.write("    <HOSTID>\n"); 
    hostID=line.substring(line.indexOf(",")+1, nthOccurrence(line, ',', 1)); 
    fw.append(hostID); 
    fw.write("</HOSTID>\n"); 
    fw.write("    <MACMODEL>\n"); 
    machineModel=line.substring(nthOccurrence(line, ',', 1)+1, nthOccurrence(line, ',', 2)); 
    fw.append(machineModel); 
    fw.write("</MACMODEL>\n"); 
    fw.write("    <PROMODEL>\n"); 
    processorModel=line.substring(nthOccurrence(line, ',', 2)+1, nthOccurrence(line, ',', 3)); 
    fw.append(processorModel); 
    fw.write("</PROMODEL>\n"); 
    fw.write("    <CORE>\n"); 
    core=line.substring(nthOccurrence(line, ',', 3)+1, nthOccurrence(line, ',', 4)); 
    fw.append(core); 
    fw.write("</CORE>\n"); 
    fw.write("    <PROC>\n"); 
    proc=line.substring(nthOccurrence(line, ',', 4)+1, nthOccurrence(line, ',', 5)); 
    fw.append(proc); 
    fw.write("</PROC>\n"); 
    fw.write("    <TIER>\n"); 
    tier=line.substring(nthOccurrence(line, ',', 5)+1, nthOccurrence(line, ',', 6)); 
    fw.append(tier); 
    fw.write("</TIER>\n"); 
    fw.write("    <PRODNAME>\n"); 
    productName=line.substring(nthOccurrence(line, ',', 6)+1, nthOccurrence(line, ',', 7)); 
    fw.append(productName); 
    fw.write("</PRODNAME>\n"); 
    fw.write("    <VERSION>\n"); 
    version=line.substring(nthOccurrence(line, ',', 7)+1, nthOccurrence(line, ',', 8)); 
    fw.append(version); 
    fw.write("</VERSION>\n"); 
    fw.write("    <SCRIPTDATA>\n"); 
    scriptData=line.substring(nthOccurrence(line, ',', 8)+1, line.length()); 
    fw.append(scriptData); 
    fw.write("</SCRIPTDATA>\n"); 


    fw.write("   </ASSET>\n"); 
    k++; 
}n++; 

इस कोड का मुख्य हिस्सा का एक टुकड़ा है। कोई विचार या समाधान ???

+0

आपका डाउन-वोटर नहीं है, लेकिन यह स्पष्ट करें कि यह "" काम करता है, "कृपया। –

+0

क्षमा करें टाइपो .... यह – user2643355

+0

काम नहीं कर रहा है हम जानते हैं कि, लेकिन भविष्य में, यह बताएं कि यह कैसे काम नहीं करता है। आपके द्वारा दी जाने वाली अधिक उपयोगी जानकारी, आपके प्रश्नों का उत्तर देना आसान होगा। –

उत्तर

20

के लिए उपयोग करने पर आप तो आप शीर्ष लेख separat का उपभोग अपने जबकि पाश से पहले headerLine = br.readLine() रखने पर विचार हो सकता बाकी फाइल से। इसके अलावा आप सीएसवी पार्सिंग के लिए opencsv का उपयोग करने पर विचार कर सकते हैं क्योंकि यह आपके तर्क को सरल बना सकता है।

5

एक चर interation बनाएँ और 0 के साथ प्रारंभ करें। इसे while लूप में पहली चीज़ के रूप में देखें।

String line; 
int iteration = 0; 
while ((line = br.readLine()) != null) { 
    if(iteration == 0) { 
     iteration++; 
     continue; 
    } 
    ... 
    ... 
} 
+0

क्या होगा अगर मैं पहली दो पंक्तियों को छोड़ना चाहता हूं? पाठ के साथ एक पंक्ति और अगली पंक्ति एक खाली पंक्ति/सफेद जगह है? –

+1

@ कालाज: क्या '' अगर (पुनरावृत्ति == 0 || पुनरावृत्ति == 1) '' इसके बजाय या बेहतर भी '' (पुनरावृत्ति <2) ''। समझ गया? – user1438038

1

मैं नहीं बल्कि अपने कोड से उलझन में हूँ, अपने lineMap है और आप भी परिवार कल्याण है (जो कि है)। कौन सा एक आप प्रयोग कर रहें है? आप कहते हैं कि आप पहली पंक्ति को छोड़ना चाहते हैं, लेकिन आप नहीं

if (firstLine == true) { 
    firstLine = false; 
    continue; 
} 

मैं भी CSVReader की तरह एक पुस्तकालय जो मैं भी belive का उपयोग कर सुझाव है कि एक संपत्ति ignoreFirstLine है

http://opencsv.sourceforge.net/apidocs/au/com/bytecode/opencsv/CSVReader.html

2

क्यों डॉन करना 'टी तुम सिर्फ पाश

for(int i=1; (line = br.readLine()) != null; i++) 
{ 
    //Your code 
} 
0

उपयोग बफर पाठक दो बार, इस तरह:

while ((line = br.readLine()) != null) { 
    while ((line = br.readLine()) != null) { 
    //your code      
    } 
} 
-1

पहली पंक्ति लंघन के लिए (जो आम तौर स्तंभों की हेडर शामिल है) एक चर लेने के लिए और प्रथम स्थान पर है, जबकि पाश में इस चर बढ़ाने के लिए, और जारी रखने के लिए;

int lineNumber = 0; 

and then in while loop 

while ((line = br.readLine()) != null) { 
         if(lineNumber == 0) { 
          lineNumber++; 
          continue; 
         } 
         lineNumber++; 

         //do waterver u have to do with the tokens in this line(second line) 

      } 
+1

एक ही मूल उत्तर एक साल पहले पोस्ट किया गया था। –

3

मुझे जावा 8 स्वाद वाले उत्तर जोड़ने के लिए मजबूर होना लगता है।

List<String> xmlLines = new BufferedReader(new FileReader(csvFile)) 
    .lines() 
    .skip(1) //Skips the first n lines, in this case 1  
    .map(s -> { 
     //csv line parsing and xml logic here 
     //... 
     return xmlString; 
    }) 
    .collect(Collectors.toList()); 
0
boolean isRecord = false; 
for (CSVRecord record : records) { 
    if(isRecord){ 
     //process records here. 
    }else{ 
     isRecord = true; 
    } 
} 
इसके बजाय झंडा जोड़ने प्रदर्शन हिट नहीं होंगे काउंटर जोड़ने की