mev-4.0.01/source/org/tigr/microarray/mev/file/agilent/Reader.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 package org.tigr.microarray.mev.file.agilent;
2 26 Feb 07 jari 2
2 26 Feb 07 jari 3 /*
2 26 Feb 07 jari 4  * Created on Jan 21, 2004
2 26 Feb 07 jari 5  */
2 26 Feb 07 jari 6 import java.io.BufferedReader;
2 26 Feb 07 jari 7 import java.io.File;
2 26 Feb 07 jari 8 import java.io.FileReader;
2 26 Feb 07 jari 9 import java.io.IOException;
2 26 Feb 07 jari 10 import java.util.StringTokenizer;
2 26 Feb 07 jari 11 import java.util.Vector;
2 26 Feb 07 jari 12
2 26 Feb 07 jari 13 /**
2 26 Feb 07 jari 14  * This is a simple utility class that reads a tab-delimited text file into a Vector of Strings
2 26 Feb 07 jari 15  * where each String is a line from the file.
2 26 Feb 07 jari 16  * 
2 26 Feb 07 jari 17  * It exists to deal with blank cells in a spreadsheet.
2 26 Feb 07 jari 18  * 
2 26 Feb 07 jari 19  * Where there are null fields in the file, a String 'replacer' is added as a placeholder.
2 26 Feb 07 jari 20  * 
2 26 Feb 07 jari 21  * @author vu
2 26 Feb 07 jari 22  */
2 26 Feb 07 jari 23 public class Reader {
2 26 Feb 07 jari 24   //private Vector vNullLine;
2 26 Feb 07 jari 25   private Vector vLine;
2 26 Feb 07 jari 26   
2 26 Feb 07 jari 27   
2 26 Feb 07 jari 28   public Reader() {
2 26 Feb 07 jari 29     //do nothing
2 26 Feb 07 jari 30   }//end constructor()
2 26 Feb 07 jari 31   
2 26 Feb 07 jari 32   
2 26 Feb 07 jari 33   public void readFile(File f) throws IOException {
2 26 Feb 07 jari 34     this.vLine = this.readLines(f);
2 26 Feb 07 jari 35   }
2 26 Feb 07 jari 36
2 26 Feb 07 jari 37
2 26 Feb 07 jari 38   public Vector getVNullLine(String s) {
2 26 Feb 07 jari 39     Vector vReturn = this.nullifyLines(this.vLine, s);
2 26 Feb 07 jari 40     return vReturn;
2 26 Feb 07 jari 41   }
2 26 Feb 07 jari 42
2 26 Feb 07 jari 43
2 26 Feb 07 jari 44   public Vector getVNullLineBasedOnHeader(String s) {
2 26 Feb 07 jari 45     Vector vReturn = this.nullifyLinesBasedOnHeader(this.vLine, s);
2 26 Feb 07 jari 46     return vReturn;
2 26 Feb 07 jari 47   }
2 26 Feb 07 jari 48   
2 26 Feb 07 jari 49   
2 26 Feb 07 jari 50   public Vector getVLine() {
2 26 Feb 07 jari 51     return this.vLine;
2 26 Feb 07 jari 52   }
2 26 Feb 07 jari 53   
2 26 Feb 07 jari 54   
2 26 Feb 07 jari 55   public Vector nullifyLinesBasedOnHeader( Vector vLines, String replacer ) {
2 26 Feb 07 jari 56     Vector vReturn = new Vector();
2 26 Feb 07 jari 57     
2 26 Feb 07 jari 58     String header = ( String ) vLines.elementAt( 0 );
2 26 Feb 07 jari 59     StringTokenizer stHeader = new StringTokenizer( header, "\t", false );
2 26 Feb 07 jari 60     int headerKount = stHeader.countTokens();
2 26 Feb 07 jari 61     
2 26 Feb 07 jari 62     //loop through the lines
2 26 Feb 07 jari 63     for(int i=0; i<vLines.size(); i++) {
2 26 Feb 07 jari 64       //if( i == 141 ) {
2 26 Feb 07 jari 65         //System.out.println("Stop");
2 26 Feb 07 jari 66       //}
2 26 Feb 07 jari 67       
2 26 Feb 07 jari 68       String line = (String) vLines.get(i);
2 26 Feb 07 jari 69       if( line.trim().equals( "" ) ) {
2 26 Feb 07 jari 70         //ignore this blank line
2 26 Feb 07 jari 71       } else {
2 26 Feb 07 jari 72         //tokenize this line
2 26 Feb 07 jari 73         StringTokenizer st = new StringTokenizer(line, "\t", true);
2 26 Feb 07 jari 74         int kount = st.countTokens();
2 26 Feb 07 jari 75
2 26 Feb 07 jari 76         StringBuffer sb = new StringBuffer();
2 26 Feb 07 jari 77         
2 26 Feb 07 jari 78         //keep track of the last token to compare to the current token
2 26 Feb 07 jari 79         String last = "";
2 26 Feb 07 jari 80         String current = null;
2 26 Feb 07 jari 81         
2 26 Feb 07 jari 82         //loop through the tokens
2 26 Feb 07 jari 83         for(int j=0; j<kount; j++) {
2 26 Feb 07 jari 84           current = st.nextToken();
2 26 Feb 07 jari 85           if(j == 0) {
2 26 Feb 07 jari 86             //first token in line
2 26 Feb 07 jari 87             if(current.equals("\t")) {
2 26 Feb 07 jari 88               //first cell was a blank cell, so replace with replacer
2 26 Feb 07 jari 89               sb.append(replacer);
2 26 Feb 07 jari 90               sb.append(current);
2 26 Feb 07 jari 91             }
2 26 Feb 07 jari 92             else {
2 26 Feb 07 jari 93               sb.append(current);
2 26 Feb 07 jari 94             }
2 26 Feb 07 jari 95           }
2 26 Feb 07 jari 96           else {
2 26 Feb 07 jari 97             //not first token
2 26 Feb 07 jari 98             if(j == kount-1) {
2 26 Feb 07 jari 99               //last token
2 26 Feb 07 jari 100               if(current.equals("\t")) {
2 26 Feb 07 jari 101                 //last token was blank cell, so replace with replacer
2 26 Feb 07 jari 102                 sb.append(current);
2 26 Feb 07 jari 103                 sb.append(replacer);
2 26 Feb 07 jari 104               }
2 26 Feb 07 jari 105               else {
2 26 Feb 07 jari 106                 sb.append(current);
2 26 Feb 07 jari 107               }
2 26 Feb 07 jari 108             }
2 26 Feb 07 jari 109             else {
2 26 Feb 07 jari 110               //not first or last token
2 26 Feb 07 jari 111               if(current.equals("\t")) {
2 26 Feb 07 jari 112                 if(last.equals("\t")) {
2 26 Feb 07 jari 113                   //2 tabs in a row, insert null
2 26 Feb 07 jari 114                   sb.append(replacer);
2 26 Feb 07 jari 115                   sb.append(current);
2 26 Feb 07 jari 116                 }
2 26 Feb 07 jari 117                 else {
2 26 Feb 07 jari 118                   //tab here, skip
2 26 Feb 07 jari 119                   sb.append(current);
2 26 Feb 07 jari 120                 }
2 26 Feb 07 jari 121               }
2 26 Feb 07 jari 122               else {
2 26 Feb 07 jari 123                 //data here
2 26 Feb 07 jari 124                 sb.append(current);
2 26 Feb 07 jari 125               }
2 26 Feb 07 jari 126             }
2 26 Feb 07 jari 127           }
2 26 Feb 07 jari 128           last = current;
2 26 Feb 07 jari 129         }//end j
2 26 Feb 07 jari 130         
2 26 Feb 07 jari 131         //before adding, now check number of cells.  if less than header line,
2 26 Feb 07 jari 132         //add nullReplacer to make it up
2 26 Feb 07 jari 133         StringTokenizer st2 = new StringTokenizer( sb.toString(), "\t", false );
2 26 Feb 07 jari 134         int tokenKount2 = st2.countTokens();
2 26 Feb 07 jari 135         int diff = headerKount - tokenKount2;
2 26 Feb 07 jari 136         for( int d = 0; d < diff; d ++ ) {
2 26 Feb 07 jari 137           if( d == 0 ) {
2 26 Feb 07 jari 138             sb.append( "\t" );
2 26 Feb 07 jari 139           }
2 26 Feb 07 jari 140           
2 26 Feb 07 jari 141           sb.append( replacer );
2 26 Feb 07 jari 142           
2 26 Feb 07 jari 143           if( d + 1 == diff ) {
2 26 Feb 07 jari 144             //don't add tab
2 26 Feb 07 jari 145           } else {
2 26 Feb 07 jari 146             sb.append( "\t" );
2 26 Feb 07 jari 147           }
2 26 Feb 07 jari 148         }
2 26 Feb 07 jari 149         
2 26 Feb 07 jari 150         vReturn.add(sb.toString());
2 26 Feb 07 jari 151       }//end else
2 26 Feb 07 jari 152     }//end i
2 26 Feb 07 jari 153     
2 26 Feb 07 jari 154     return vReturn;
2 26 Feb 07 jari 155   }
2 26 Feb 07 jari 156
2 26 Feb 07 jari 157
2 26 Feb 07 jari 158   /**
2 26 Feb 07 jari 159    * This method exists to deal with the StringTokenizer's inability to recognize a
2 26 Feb 07 jari 160    * blank cell in a tab-delim file.  StringTokinzer just ignores it, so I wrote this to
2 26 Feb 07 jari 161    * replace a blank cell with a 'replacer' String.
2 26 Feb 07 jari 162    * 
2 26 Feb 07 jari 163    * Note: does not work when last cells in line are left blank
2 26 Feb 07 jari 164    * 
2 26 Feb 07 jari 165    * @param vLines
2 26 Feb 07 jari 166    * @param replacer
2 26 Feb 07 jari 167    * @return  Vector of Lines from file where blank cells are replaced with 'replacer'
2 26 Feb 07 jari 168    */
2 26 Feb 07 jari 169   public Vector nullifyLines (Vector vLines, String replacer) {
2 26 Feb 07 jari 170     Vector vReturn = new Vector();
2 26 Feb 07 jari 171     
2 26 Feb 07 jari 172     //loop through the lines
2 26 Feb 07 jari 173     for(int i=0; i<vLines.size(); i++) {
2 26 Feb 07 jari 174       String line = (String) vLines.get(i);
2 26 Feb 07 jari 175       
2 26 Feb 07 jari 176       if( line.trim().equals( "" ) ) {
2 26 Feb 07 jari 177         //ignore blank line
2 26 Feb 07 jari 178       } else {
2 26 Feb 07 jari 179   
2 26 Feb 07 jari 180         //tokenize this line
2 26 Feb 07 jari 181         StringTokenizer st = new StringTokenizer( line, "\t", true );
2 26 Feb 07 jari 182         int kount = st.countTokens();
2 26 Feb 07 jari 183   
2 26 Feb 07 jari 184         StringBuffer sb = new StringBuffer();
2 26 Feb 07 jari 185         
2 26 Feb 07 jari 186         //keep track of the last token to compare to the current token
2 26 Feb 07 jari 187         String last = "";
2 26 Feb 07 jari 188         String current = null;
2 26 Feb 07 jari 189         
2 26 Feb 07 jari 190         //loop through the tokens
2 26 Feb 07 jari 191         for(int j=0; j<kount; j++) {
2 26 Feb 07 jari 192           current = st.nextToken();
2 26 Feb 07 jari 193           if(j == 0) {
2 26 Feb 07 jari 194             //first token in line
2 26 Feb 07 jari 195             if(current.equals("\t")) {
2 26 Feb 07 jari 196               //first cell was a blank cell, so replace with replacer
2 26 Feb 07 jari 197               sb.append(replacer);
2 26 Feb 07 jari 198               sb.append(current);
2 26 Feb 07 jari 199             }
2 26 Feb 07 jari 200             else {
2 26 Feb 07 jari 201               sb.append(current);
2 26 Feb 07 jari 202             }
2 26 Feb 07 jari 203           }
2 26 Feb 07 jari 204           else {
2 26 Feb 07 jari 205             //not first token
2 26 Feb 07 jari 206             if(j == kount-1) {
2 26 Feb 07 jari 207               //last token
2 26 Feb 07 jari 208               if(current.equals("\t")) {
2 26 Feb 07 jari 209                 //last token was blank cell, so replace with replacer
2 26 Feb 07 jari 210                 sb.append(current);
2 26 Feb 07 jari 211                 sb.append(replacer);
2 26 Feb 07 jari 212               }
2 26 Feb 07 jari 213               else {
2 26 Feb 07 jari 214                 sb.append(current);
2 26 Feb 07 jari 215               }
2 26 Feb 07 jari 216             }
2 26 Feb 07 jari 217             else {
2 26 Feb 07 jari 218               //not first or last token
2 26 Feb 07 jari 219               if(current.equals("\t")) {
2 26 Feb 07 jari 220                 if(last.equals("\t")) {
2 26 Feb 07 jari 221                   //2 tabs in a row, insert null
2 26 Feb 07 jari 222                   sb.append(replacer);
2 26 Feb 07 jari 223                   sb.append(current);
2 26 Feb 07 jari 224                 }
2 26 Feb 07 jari 225                 else {
2 26 Feb 07 jari 226                   //tab here, skip
2 26 Feb 07 jari 227                   sb.append(current);
2 26 Feb 07 jari 228                 }
2 26 Feb 07 jari 229               }
2 26 Feb 07 jari 230               else {
2 26 Feb 07 jari 231                 //data here
2 26 Feb 07 jari 232                 sb.append(current);
2 26 Feb 07 jari 233               }
2 26 Feb 07 jari 234             }
2 26 Feb 07 jari 235           }
2 26 Feb 07 jari 236           last = current;
2 26 Feb 07 jari 237         }//end j
2 26 Feb 07 jari 238         vReturn.add(sb.toString());
2 26 Feb 07 jari 239       }//end else
2 26 Feb 07 jari 240     }//end i
2 26 Feb 07 jari 241     
2 26 Feb 07 jari 242     return vReturn;
2 26 Feb 07 jari 243   }//end parseLines()
2 26 Feb 07 jari 244
2 26 Feb 07 jari 245
2 26 Feb 07 jari 246   public Vector readLines(File f) throws IOException {
2 26 Feb 07 jari 247     Vector vReturn = new Vector();
2 26 Feb 07 jari 248     String s;
2 26 Feb 07 jari 249
2 26 Feb 07 jari 250     FileReader fr = new FileReader(f);
2 26 Feb 07 jari 251     BufferedReader br = new BufferedReader(fr);
2 26 Feb 07 jari 252
2 26 Feb 07 jari 253     while( (s = br.readLine()) != null ) {
2 26 Feb 07 jari 254       vReturn.add(s);
2 26 Feb 07 jari 255     }
2 26 Feb 07 jari 256     fr.close();
2 26 Feb 07 jari 257     br.close();
2 26 Feb 07 jari 258     
2 26 Feb 07 jari 259     return vReturn;
2 26 Feb 07 jari 260   }
2 26 Feb 07 jari 261 }