Posted by
Unruh, Jay-2 on
Oct 13, 2009; 6:57pm
URL: http://imagej.273.s1.nabble.com/importing-Text-Image-files-tp3690802p3690805.html
Stephen,
Below is the source code for a version of text_reader.java that accepts commas instead of tabs.
Jay Unruh
Research Specialist
Stowers Institute for Medical Research
import ij.*;
import ij.process.*;
import ij.gui.*;
import java.awt.*;
import ij.plugin.*;
import java.awt.image.*;
import java.io.*;
import ij.io.*;
import ij.util.Tools;
//here is a csv reader. This is just a copy of text_reader.java with the tokenizer changed to accept commas as delimiters
//changes made 4/22/08 by Jay Unruh, Research Specialist, Stowers Institute for Medical Research
public class csv_reader_jru_v1 implements PlugIn {
int words = 0, chars = 0, lines = 0, width=1;;
String directory, name, path;
boolean hideErrorMessages;
public void run(String arg) {
if (showDialog()) {
IJ.showStatus("Opening: " + path);
ImageProcessor ip = open(path);
if (ip!=null)
new ImagePlus(name, ip).show();
}
}
boolean showDialog() {
OpenDialog od = new OpenDialog("Open Text Image...", null);
directory = od.getDirectory();
name = od.getFileName();
if (name!=null)
path = directory + name;
return name!=null;
}
/** Displays a file open dialog and opens the specified text file as a float image. */
public ImageProcessor open(){
if (showDialog())
return open(path);
else
return null;
}
/** Opens the specified text file as a float image. */
public ImageProcessor open(String path){
ImageProcessor ip = null;
try {
words = chars = lines = 0;
Reader r = new BufferedReader(new FileReader(path));
countLines(r);
r.close();
r = new BufferedReader(new FileReader(path));
//int width = words/lines;
float[] pixels = new float[width*lines];
ip = new FloatProcessor(width, lines, pixels, null);
read(r, width*lines, pixels);
r.close();
ip.resetMinAndMax();
}
catch (IOException e) {
String msg = e.getMessage();
if (msg==null || msg.equals(""))
msg = ""+e;
if (!hideErrorMessages)
IJ.error("TextReader", msg);
ip = null;
}
return ip;
}
public void hideErrorMessages() {
hideErrorMessages = true;
}
/** Returns the file name. */
public String getName() {
return name;
}
void countLines(Reader r) throws IOException {
StreamTokenizer tok = new StreamTokenizer(r);
int wordsPerLine=0, wordsInPreviousLine=0;
tok.resetSyntax();
tok.wordChars(46, 127);
tok.whitespaceChars(0, 45);
tok.whitespaceChars(128, 255);
tok.eolIsSignificant(true);
while (tok.nextToken() != StreamTokenizer.TT_EOF) {
switch (tok.ttype) {
case StreamTokenizer.TT_EOL:
lines++;
if (wordsPerLine==0)
lines--; // ignore empty lines
if (lines==1)
width = wordsPerLine;
else if (wordsPerLine!=0 && wordsPerLine!=wordsInPreviousLine)
throw new IOException("Line "+lines+ " is not the same length as the first line.");
if (wordsPerLine!=0)
wordsInPreviousLine = wordsPerLine;
wordsPerLine = 0;
if (lines%20==0 && width>1 && lines<=width)
IJ.showProgress(((double)lines/width)/2.0);
break;
case StreamTokenizer.TT_WORD:
words++;
wordsPerLine++;
break;
}
}
if (wordsPerLine==width)
lines++; // last line does not end with EOL
}
void read(Reader r, int size, float[] pixels) throws IOException {
StreamTokenizer tok = new StreamTokenizer(r);
tok.resetSyntax();
//the next two lines were changed by JU to allow for comma delimiters
tok.wordChars(46, 127);
tok.whitespaceChars(0, 45);
tok.whitespaceChars(128, 255);
//tok.parseNumbers();
int i = 0;
int inc = size/20;
if (inc<1)
inc = 1;
while (tok.nextToken() != StreamTokenizer.TT_EOF) {
if (tok.ttype==StreamTokenizer.TT_WORD) {
pixels[i++] = (float)Tools.parseDouble(tok.sval, 0.0);
if (i==size)
break;
if (i%inc==0)
IJ.showProgress(0.5+((double)i/size)/2.0);
}
}
IJ.showProgress(1.0);
}
}
-----Original Message-----
From: ImageJ Interest Group [mailto:
[hidden email]] On Behalf Of Chinn, Steve Dr CIV USA AMC
Sent: Tuesday, October 13, 2009 1:42 PM
To:
[hidden email]
Subject: importing Text Image files
(1.43h, Win XP Pro, SP3)
The documentation says that Import-> Text Image works with tab-delimited text files. We have camera output that saves precise numerical data only in comma-delimited text format, which cannot be loaded into ImageJ without an intermediate format conversion step using another application (e.g. Excel, Igor Pro). I could not find an appropriate ImageJ plug-in on the web site. Does anyone have such a plug-in or simpler solution?
Could this be added to ImageJ as a Text Image option?
Stephen R. Chinn, Ph.D.
US Army RDECOM CERDEC
Night Vision and Electronic Sensors Directorate RDER-NVS-LT
10221 Burbeck Road
Fort Belvoir, VA 22060-5806
(703) 704-3821; FAX: (703) 704-1752
[hidden email] <mailto:
[hidden email]>