Mercurial > repos > rliterman > csp2
diff CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/opt/bbmap-39.01-1/current/fileIO/TextFile.java @ 68:5028fdace37b
planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author | jpayne |
---|---|
date | Tue, 18 Mar 2025 16:23:26 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/opt/bbmap-39.01-1/current/fileIO/TextFile.java Tue Mar 18 16:23:26 2025 -0400 @@ -0,0 +1,305 @@ +package fileIO; +import java.io.BufferedReader; +import java.io.File; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.ArrayList; + +import shared.Shared; +import shared.Timer; +import shared.Tools; + + +public class TextFile { + + + public static void main(String[] args){ + TextFile tf=new TextFile(args.length>0 ? args[0] : "stdin", false); + int first=0; + long last=100; + boolean speedtest=false; + if(args.length>1){ + if(args[1].equalsIgnoreCase("speedtest")){ + speedtest=true; + first=0; + last=Long.MAX_VALUE; + }else{ + first=Integer.parseInt(args[1]); + last=first+100; + } + } + if(args.length>2){ + last=Integer.parseInt(args[2]); + } + speedtest(tf, first, last, !speedtest); + +// long lines=0; +// long bytes=0; +// if(args.length>1){ +// first=Integer.parseInt(args[1]); +// last=first+100; +// } +// if(args.length>2){ +// last=Integer.parseInt(args[2]); +// } +// +// for(int i=0; i<first; i++){tf.readLine();} +// for(int i=first; i<last; i++){ +// String s=tf.readLine(); +// if(s==null){break;} +// +// lines++; +// bytes+=s.length(); +// System.out.println(s); +//// System.out.println(Arrays.toString(s.getBytes())); +// } +// +// System.err.println("\n"); +// System.err.println("Lines: "+lines); +// System.err.println("Bytes: "+bytes); +// tf.close(); +// tf.reset(); +// tf.close(); +// +//// for(int i=first; i<last; i++){ +//// String s=tf.readLine(); +//// if(s==null){break;} +//// +//// lines++; +//// bytes+=s.length(); +//// System.out.println(s); +//// } + } + + private static void speedtest(TextFile tf, long first, long last, boolean reprint){ + Timer t=new Timer(); + long lines=0; + long bytes=0; + for(long i=0; i<first; i++){tf.nextLine();} + if(reprint){ + for(long i=first; i<last; i++){ + String s=tf.nextLine(); + if(s==null){break;} + + lines++; + bytes+=s.length(); + System.out.println(s); + } + + System.err.println("\n"); + System.err.println("Lines: "+lines); + System.err.println("Bytes: "+bytes); + }else{ + for(long i=first; i<last; i++){ + String s=tf.nextLine(); + if(s==null){break;} + lines++; + bytes+=s.length(); + } + } + t.stop(); + + if(!reprint){ + System.err.println(Tools.timeLinesBytesProcessed(t, lines, bytes, 8)); + } + } + + public TextFile(String name){this(name, false);} + + public TextFile(FileFormat ff){ + file=new File(ff.name()); + allowSubprocess=ff.allowSubprocess(); + name=ff.name(); + + br=open(); + } + + public TextFile(String fname, boolean allowSubprocess_){ + fname=fname.replace('\\', '/'); + file=new File(fname); + allowSubprocess=allowSubprocess_; + name=fname; + + br=open(); + } + + public static final String[] toStringLines(FileFormat ff){ + TextFile tf=new TextFile(ff); + String[] lines=tf.toStringLines(); + tf.close(); + return lines; + } + + public static final String[] toStringLines(String fname){ + TextFile tf=new TextFile(fname); + String[] lines=tf.toStringLines(); + tf.close(); + return lines; + } + + /** Generate an array of the lines in this TextFile */ + public final String[] toStringLines(){ + + String s=null; + ArrayList<String> list=new ArrayList<String>(4096); + + for(s=nextLine(); s!=null; s=nextLine()){ + list.add(s); + } + + return list.toArray(new String[list.size()]); + + } + + public final long countLines(){ + + String s=null; + long count=0; + + for(s=nextLine(); s!=null; s=nextLine()){count++;} + + reset(); + + return count; + + } + + public static String[][] doublesplitTab(String[] lines, boolean trim){ + String[][] lines2=new String[lines.length][]; + for(int i=0; i<lines.length; i++){ + if(trim){ + lines2[i]=lines[i].trim().split("\t", -1); + }else{ + lines2[i]=lines[i].split("\t", -1); + } + } + return lines2; + } + + + public static String[][] doublesplitWhitespace(String[] lines, boolean trim){ + String[][] lines2=new String[lines.length][]; + for(int i=0; i<lines.length; i++){ + if(trim){ + lines2[i]=lines[i].trim().split("\\p{javaWhitespace}+"); + }else{ + lines2[i]=lines[i].split("\\p{javaWhitespace}+"); + } + } + return lines2; + } + + public final void reset(){ + close(); + br=open(); + } + + public boolean exists(){ + return name.equals("stdin") || name.startsWith("stdin.") || name.startsWith("jar:") || file.exists(); //TODO Ugly and unsafe hack for files in jars + } + + public final boolean close(){ + if(!open){return false;} + open=false; + assert(br!=null); + + errorState|=ReadWrite.finishReading(is, name, allowSubprocess, br, isr); + + br=null; + is=null; + isr=null; + lineNum=-1; + return false; + } + + public String nextLine(){ + return readLine(true); + } + + public final String readLine(){ + return readLine(true); + } + + public final String readLine(boolean skipBlank){ + String currentLine=null; + + + //Note: Disabling this block seems to speed things up maybe 5%. +// boolean ready=false; +// try { +// ready=br.ready(); +// } catch (IOException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// if(!ready){return null;} + + if(!open || br==null){ + if(Shared.WINDOWS){System.err.println("Attempting to read from a closed file: "+name);} + return null; + } + try{ + lineNum++; + currentLine=br.readLine(); +// System.out.println(lineNum+":\t"+currentLine); + }catch(Exception e){ + System.err.println("Oops! Bad read in file "+name+" at line "+lineNum); + System.err.println(""+open+", "+(br==null)); + try { + File f=new File(name); + System.err.println("path and length: \t"+f.getAbsolutePath()+"\t"+f.length()); + } catch (Exception e1) { + //e1.printStackTrace(); + } + throw new RuntimeException(e); + } + if(currentLine==null){return null;} +// System.out.println("Read "+line); + +// currentLine=currentLine.trim(); + + //Note! This may generate a new String for every line and thus be slow. +// if(currentLine.trim().length()==0){return readLine();} //Skips blank lines + if(skipBlank && (currentLine.length()==0 || + (Character.isWhitespace(currentLine.charAt(0)) && + (Character.isWhitespace(currentLine.charAt(currentLine.length()-1)))) && + currentLine.trim().length()==0)){ + return readLine(skipBlank); //Skips blank lines + } + + return currentLine; + } + + private final BufferedReader open(){ + + if(open){ + throw new RuntimeException("Attempt to open already-opened TextFile "+name); + } + open=true; + + is=ReadWrite.getInputStream(name, true, allowSubprocess); + isr=new InputStreamReader(is); + + BufferedReader b=new BufferedReader(isr, 32768); + + return b; + } + + public boolean isOpen(){return open;} + + private boolean open=false; + public boolean errorState=false; + + public final String name; + public File file; + private final boolean allowSubprocess; + + public InputStream is; + public InputStreamReader isr; + public BufferedReader br; + + public long lineNum=-1; + + public static boolean verbose=false; + +}