1 10 package org.mmbase.util; 11 12 13 14 import java.io.File ; 15 import java.io.FileInputStream ; 16 import java.util.Hashtable ; 17 import java.util.StringTokenizer ; 18 import java.util.Vector ; 19 20 import org.mmbase.util.logging.*; 21 22 30 public class CVSReader { 31 32 private static Logger log = Logging.getLoggerInstance(CVSReader.class.getName()); 34 35 38 String filename; 39 44 protected Hashtable name2pos; 45 51 protected Vector rows=new Vector (); 52 53 57 public CVSReader(String filename) { 58 readCVS(filename); 59 } 60 61 66 public void readCVS(String filename) { 67 String body=loadFile(filename); 68 StringTokenizer tok=new StringTokenizer (body,"\n\r"); 69 if (tok.hasMoreTokens()) name2pos=decodeHeader(tok.nextToken()); 70 rows=decodeBody(tok); 71 } 72 73 81 Vector decodeBody(StringTokenizer mtok) { 82 Vector results=new Vector (); 83 84 while (mtok.hasMoreTokens()) { 85 String line=mtok.nextToken(); 86 Vector results2=new Vector (); 87 StringTokenizer tok=new StringTokenizer (line,",\"\n\r",true); 88 String prebar=","; 89 while (tok.hasMoreTokens()) { 90 String bar=tok.nextToken(); 91 if (bar.equals("\"")) { 92 String part=tok.nextToken(); 93 String part2=""; 94 while (!part.equals("\"")) { 95 part2+=part; 96 part=tok.nextToken(); 97 } 98 results2.addElement(part2); 99 } else { 100 if (bar.equals(",")) { 101 if (prebar.equals(",") || !tok.hasMoreTokens()) { 102 results2.addElement(""); 103 } 104 if (!tok.hasMoreTokens()) { 105 results2.addElement(""); 106 } 107 } else { 108 results2.addElement(bar); 109 } 110 } 111 prebar=bar; 112 } 113 results.addElement(results2); 114 } 115 return results; 116 } 117 118 124 Hashtable decodeHeader(String line) { 125 int i=0; 126 Hashtable results=new Hashtable (); 127 StringTokenizer tok=new StringTokenizer (line,",\n\r"); 129 while (tok.hasMoreTokens()) { 130 String part=tok.nextToken(); 131 part = Strip.DoubleQuote(part,Strip.BOTH); 132 results.put(part,new Integer (i++)); 133 } 134 return results; 135 } 136 137 142 public String loadFile(String filename) { 143 try { 144 File sfile = new File (filename); 145 FileInputStream scan =new FileInputStream (sfile); 146 int filesize = (int)sfile.length(); 147 byte[] buffer=new byte[filesize]; 148 int len=scan.read(buffer,0,filesize); 149 if (len!=-1) { 150 return new String (buffer); 153 } 154 scan.close(); 155 } catch(Exception e) { 156 log.error(e); 157 log.error(Logging.stackTrace(e)); 158 } 159 return null; 160 } 161 162 168 public String getElement(int row,int col) { 169 Vector rw=(Vector )rows.elementAt(row); 170 String value=(String )rw.elementAt(col); 171 return value; 172 } 173 174 175 181 public String getElement(int row,String colname) { 182 Integer ii=(Integer )name2pos.get(colname); 183 if (ii!=null) { 184 int i=ii.intValue(); 185 Vector rw=(Vector )rows.elementAt(row); 186 String value=(String )rw.elementAt(i); 187 return value; 188 } 189 return null; 190 } 191 192 195 public int size() { 196 return rows.size(); 197 } 198 } 199 | Popular Tags |