2 // This software is now distributed according to
\r
3 // the Lesser Gnu Public License. Please see
\r
4 // http://www.gnu.org/copyleft/lesser.txt for
\r
6 // -- Happy Computing!
\r
8 package com.stevesoft.pat.wrap;
\r
10 import com.stevesoft.pat.*;
\r
13 /** Provides a wrapper for a RandomAccessFile so that it
\r
14 can be searched by Regex. */
\r
15 public class RandomAccessFileWrap implements StringLike {
\r
18 public void setOffset(long o) {
\r
22 public long getOffset() {
\r
25 RandomAccessFile raf;
\r
27 byte[] buf = new byte[1024];
\r
29 public int getBufferSize() {
\r
33 public void setBufferSize(int bs) {
\r
38 public RandomAccessFileWrap(String file) throws IOException {
\r
39 this.raf = new RandomAccessFile(file,"r");
\r
41 public RandomAccessFileWrap(RandomAccessFile raf) {
\r
45 public char charAt(int i) {
\r
46 if(i >= i0 && i < iend)
\r
47 return (char)buf[i-i0];
\r
51 //if(i0+offset<0) i0=(int)(-offset);
\r
53 raf.seek(i0+offset);
\r
54 iend = i0+raf.read(buf,0,buf.length);
\r
56 if(i >= i0 && i < iend)
\r
57 return (char)buf[i-i0];
\r
58 } catch(Throwable t) {}
\r
60 throw new ArrayIndexOutOfBoundsException("Out of bounds for file:"+
\r
62 ", Final Buffer: i0="+i0+
\r
66 public String toString() { throw new Error("Not implemented"); }
\r
67 public int length() {
\r
69 long len = raf.length()-offset;
\r
70 if(len > Integer.MAX_VALUE)
\r
71 return Integer.MAX_VALUE;
\r
73 } catch(IOException ioe) {
\r
77 public String substring(int i1,int i2) {
\r
78 StringBuffer sb = new StringBuffer();
\r
79 for(int i=i1;i<i2;i++)
\r
80 sb.append(charAt(i));
\r
81 return sb.toString();
\r
83 public Object unwrap() { return raf; }
\r
85 public static void main(String[] files) throws IOException {
\r
86 for(int i=0;i<files.length;i++) {
\r
87 RandomAccessFileWrap fw =
\r
88 new RandomAccessFileWrap(new RandomAccessFile(files[i],"r"));
\r
89 Regex r = new Regex("toString\\(\\) *(?@{})");
\r
92 System.out.print(files[i]+" ");
\r
95 if(r.searchFrom(fw,j)) {
\r
96 System.out.println("Matched at index: "+
\r
100 System.out.println("not found");
\r
101 System.out.println(r.stringMatched());
\r
102 } while(r.didMatch());
\r
106 public BasicStringBufferLike newStringBufferLike() {
\r
107 return new StringBufferWrap();
\r
110 public int indexOf(char c) {
\r
111 for(int i=0;i<length();i++)
\r