mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/usc/Reader.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 package org.tigr.microarray.mev.cluster.gui.impl.usc;
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 nullReplacer ) {
2 26 Feb 07 jari 39     Vector vReturn = this.nullifyLines(this.vLine, nullReplacer);
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 getVLine() {
2 26 Feb 07 jari 45     return this.vLine;
2 26 Feb 07 jari 46   }
2 26 Feb 07 jari 47
2 26 Feb 07 jari 48
2 26 Feb 07 jari 49   /**
2 26 Feb 07 jari 50    * This method exists to deal with the StringTokenizer's inability to recognize a
2 26 Feb 07 jari 51    * blank cell in a tab-delim file.  StringTokinzer just ignores it, so I wrote this to
2 26 Feb 07 jari 52    * replace a blank cell with a 'replacer' String.
2 26 Feb 07 jari 53    * @param vLines
2 26 Feb 07 jari 54    * @param replacer
2 26 Feb 07 jari 55    * @return  Vector of Lines from file where blank cells are replaced with 'replacer'
2 26 Feb 07 jari 56    */
2 26 Feb 07 jari 57   private Vector nullifyLines (Vector vLines, String replacer) {
2 26 Feb 07 jari 58     Vector vReturn = new Vector();
2 26 Feb 07 jari 59     
2 26 Feb 07 jari 60     //loop through the lines
2 26 Feb 07 jari 61     for(int i=0; i<vLines.size(); i++) {
2 26 Feb 07 jari 62       String line = (String) vLines.get(i);
2 26 Feb 07 jari 63       
2 26 Feb 07 jari 64       //System.out.println( "line - " + i + " = " + line );
2 26 Feb 07 jari 65       
2 26 Feb 07 jari 66       if( line.equals("") || line == null )  {
2 26 Feb 07 jari 67         //blank line, don't include
2 26 Feb 07 jari 68         System.out.println( i + " is blank" );
2 26 Feb 07 jari 69       } else {
2 26 Feb 07 jari 70         //tokenize this line
2 26 Feb 07 jari 71         StringTokenizer st = new StringTokenizer(line, "\t", true);
2 26 Feb 07 jari 72         int kount = st.countTokens();
2 26 Feb 07 jari 73   
2 26 Feb 07 jari 74         StringBuffer sb = new StringBuffer();
2 26 Feb 07 jari 75         
2 26 Feb 07 jari 76         //keep track of the last token to compare to the current token
2 26 Feb 07 jari 77         String last = "";
2 26 Feb 07 jari 78         String current = null;
2 26 Feb 07 jari 79         
2 26 Feb 07 jari 80         //loop through the tokens
2 26 Feb 07 jari 81         for(int j=0; j<kount; j++) {
2 26 Feb 07 jari 82           current = st.nextToken();
2 26 Feb 07 jari 83           if(j == 0) {
2 26 Feb 07 jari 84             //first token in line
2 26 Feb 07 jari 85             if(current.equals("\t")) {
2 26 Feb 07 jari 86               //first cell was a blank cell, so replace with replacer
2 26 Feb 07 jari 87               sb.append(replacer);
2 26 Feb 07 jari 88               sb.append(current);
2 26 Feb 07 jari 89             }
2 26 Feb 07 jari 90             else {
2 26 Feb 07 jari 91               sb.append(current);
2 26 Feb 07 jari 92             }
2 26 Feb 07 jari 93           }
2 26 Feb 07 jari 94           else {
2 26 Feb 07 jari 95             //not first token
2 26 Feb 07 jari 96             if(j == kount-1) {
2 26 Feb 07 jari 97               //last token
2 26 Feb 07 jari 98               if(current.equals("\t")) {
2 26 Feb 07 jari 99                 //last token was blank cell, so replace with replacer
2 26 Feb 07 jari 100                 sb.append(current);
2 26 Feb 07 jari 101                 sb.append(replacer);
2 26 Feb 07 jari 102               }
2 26 Feb 07 jari 103               else {
2 26 Feb 07 jari 104                 sb.append(current);
2 26 Feb 07 jari 105               }
2 26 Feb 07 jari 106             }
2 26 Feb 07 jari 107             else {
2 26 Feb 07 jari 108               //not first or last token
2 26 Feb 07 jari 109               if(current.equals("\t")) {
2 26 Feb 07 jari 110                 if(last.equals("\t")) {
2 26 Feb 07 jari 111                   //2 tabs in a row, insert null
2 26 Feb 07 jari 112                   sb.append(replacer);
2 26 Feb 07 jari 113                   sb.append(current);
2 26 Feb 07 jari 114                 }
2 26 Feb 07 jari 115                 else {
2 26 Feb 07 jari 116                   //tab here, skip
2 26 Feb 07 jari 117                   sb.append(current);
2 26 Feb 07 jari 118                 }
2 26 Feb 07 jari 119               }
2 26 Feb 07 jari 120               else {
2 26 Feb 07 jari 121                 //data here
2 26 Feb 07 jari 122                 sb.append(current);
2 26 Feb 07 jari 123               }
2 26 Feb 07 jari 124             }
2 26 Feb 07 jari 125           }
2 26 Feb 07 jari 126           last = current;
2 26 Feb 07 jari 127         }//end j
2 26 Feb 07 jari 128         vReturn.add(sb.toString());
2 26 Feb 07 jari 129       }
2 26 Feb 07 jari 130     }//end i
2 26 Feb 07 jari 131     
2 26 Feb 07 jari 132     return vReturn;
2 26 Feb 07 jari 133   }//end parseLines()
2 26 Feb 07 jari 134
2 26 Feb 07 jari 135
2 26 Feb 07 jari 136   private Vector readLines(File f) throws IOException {
2 26 Feb 07 jari 137     Vector vReturn = new Vector();
2 26 Feb 07 jari 138     String s;
2 26 Feb 07 jari 139
2 26 Feb 07 jari 140     FileReader fr = new FileReader(f);
2 26 Feb 07 jari 141     BufferedReader br = new BufferedReader(fr);
2 26 Feb 07 jari 142
2 26 Feb 07 jari 143     while( (s = br.readLine()) != null ) {
2 26 Feb 07 jari 144       vReturn.add(s);
2 26 Feb 07 jari 145     }
2 26 Feb 07 jari 146     fr.close();
2 26 Feb 07 jari 147     br.close();
2 26 Feb 07 jari 148     
2 26 Feb 07 jari 149     return vReturn;
2 26 Feb 07 jari 150   }
2 26 Feb 07 jari 151 }