yamp03
yamp03

Reputation: 35

Reading a file and displaying wanted results

I have a program that reads files like the one below.

12  9-62-1                      

Sample Name:        9-62-1          Injection Volume:       25.0  
Vial Number:        37          Channel:        ECD_1
Sample Type:        unknown         Wavelength:     n.a.
Control Program:        Anions Run          Bandwidth:      n.a.
Quantif. Method:        Anions Method           Dilution Factor:        1.0000  
Recording Time:     10/2/2013 19:55         Sample Weight:      1.0000  
Run Time (min):     14.00           Sample Amount:      1.0000  






No.     Ret.Time    Peak Name   Height  Area    Rel.Area    Amount  Type 
    min     µS  µS*min  %   mG/L    
1   2.99        Fluoride    7.341   1.989   0.87        10.458  BMB
2   3.88        Chloride    425.633     108.551     47.72       671.120     BMb
3   4.54        Nitrite 397.537     115.237     50.66       403.430     bMB
4   5.39        n.a.    0.470   0.140   0.06        n.a.    BMB
5   11.22       Sulfate 4.232   1.564   0.69        13.064  BMB
Total:          835.213     227.482     100.00      1098.073 

From these files, the program should output a few things not everything. The final results that I need should look like this:

0012.TXT
Sample#,Date,Time,Peak Name, Amount
9-62-1,10/2/2013,19:55,Fluoride,10.458
9-62-1,10/2/2013,19:55,Chloride,671.120
9-62-1,10/2/2013,19:55,Nitrite,403.430 
9-62-1,10/2/2013,19:55,Sulfate,13.064

But, right now they look like this:

0012.TXT
Sample#,Date,Time,Peak Name, Amount
9-62-1,10/2/2013,19:55,Fluoride,10.458 ,
Chloride,671.120 ,
Nitrite,403.430 ,
n.a.,n.a.,
Sulfate,13.064 ,
,1098.073 ,

Here is my code and what I have done.

Scanner input = new Scanner(new FileReader(selectFile.getSelectedFile()));
                    System.out.println("Sample#,Date,Time,Peak Name,Amount");

                    int linesToSkip = 28;

                    BufferedReader br = new BufferedReader(new FileReader(selectFile.getSelectedFile()));

                        String line;
                        while ( (line = br.readLine()) != null) {
                            if (linesToSkip-- > 0) {
                            continue;
                            }
                            if (line.contains("n.a.")) {
                            continue;
                            }
                            if (line.contains("Total")) { 
                                continue;
                            }

                            String[] values = line.split("\t");

                            int index = 0;
                            for (String value : values) {
                                /*System.out.println("values[" + index + "] = " + value);*/
                                index++;



                                }

                                while (input.hasNext()) {

                                        String word = input.next();
                                        Pattern pattern1 = Pattern.compile("Name:");
                                        Pattern pattern2 = Pattern.compile("Time:");
                                        Matcher matcher1 = pattern1.matcher(word);
                                        Matcher matcher2 = pattern2.matcher(word);
                                        Matcher matcher3 = pattern2.matcher(word);

                                        if(matcher1.matches()){
                                            System.out.print(input.next() + ",");
                                        }
                                        if(matcher2.matches()){
                                            System.out.print(input.next() + ",");
                                        }
                                        if(matcher3.matches()){
                                            System.out.print(input.next() + ",");
                                        } 
                                        System.out.print("");
                                }

                                System.out.print(values[2]+",");
                                System.out.println(values[6]+"\b,"); 


                        }
                   br.close();

How can I make the output look like these with the sample#, Date and Time then followed by the peak name and amount and print them that way on each line?

Sample#,Date,Time,Peak Name, Amount
9-62-1,10/2/2013,19:55,Fluoride,10.458
9-62-1,10/2/2013,19:55,Chloride,671.120
9-62-1,10/2/2013,19:55,Nitrite,403.430 
9-62-1,10/2/2013,19:55,Sulfate,13.064

Thanks!

Upvotes: 0

Views: 129

Answers (1)

Smit
Smit

Reputation: 4715

Something like:

while ( (line = br.readLine()) != null) {
     if (line.contains("n.a.")) {
       continue;
     }

//Your code

You can do the same in your inner while loop for specific table item for peak name value and the amount value. In that case you can use String#equales() method.


Edit for Comments:

You are over complicating your things while printing and reading your file content. Dont use Scanner as well as BufferedReader. One will do the work for you.

You have very specific format for your file. You really dont need to use regex for this purpose, which you are using in your inner while loop.

For sample name to match use String#equales() method and do you operations accordingly.

  1. Get the values you needed from upper section of your file like Sample Name and Recording Time, keep them handy, so that you could use them later.

  2. From you lower section get Peak Name and amount from each row.

  3. While printing construct your String by making use of these collected values.


Another Edit for Comments:

the following code is not tested, so there could be some issues, but you can figure them out. If you look at String Class then you will find many useful methods.

BufferedReader br = new BufferedReader(new FileReader(selectFile.getSelectedFile()));

String recTime, peakName, amount, sample ;
int linesToSkip = 28;
String line = br.readLine();

if(line != null){
    String[] values = line.split("\t");
    sample = values[1];
}

while ( (line = br.readLine()) != null) {
    values = line.split("\t");

    if (line.startsWith("Sample Name")) { 
       // Check here value[1] is equal to sample. If this is needed.
       // You got your sample name here 
    } else if (line.startsWith("Recording Time")) { 
       recTime = values[1];
       // You got your Recording Time here 
    } else if(values.length > 4 ){
       // get Peak Name and recording time
       peakName = values[2];
       amount = values[6];
    } else if (line.contains("n.a.") || line.contains("Total") || linesToSkip-- > 0) {
       /* may not needed linesToSkip-- > 0 in above condition */ 
       continue;
    } 

    System.out.println(sample +" ," + recTime + " ," + peakName + " ," + amount);
}

I hope this helps. Good Luck.

Upvotes: 2

Related Questions