Re: StreamTokenizer, data records, indexing/ newline trouble
I posted this a bit ago, but it isn't showing up after about 15
minutes, so here's a second post in case the first one got lost in the
ether. I think it satisfies all requirements given.
/////////////////////////////////////////////////////////////
/**
* Copyright Daniel Gee 2007.
* Use as you like.
*/
import java.io.*;
import java.util.*;
import java.util.regex.*;
public class FieldTokenizer
{
public static void main(String args[])
{
ArrayList<Item> items = new ArrayList<Item>();
BufferedReader br = null;
try
{
br = new BufferedReader(new FileReader(args[0]));
}
catch (Exception e)
{
System.err.println(e);
System.exit(1);
}
Item ite;
char[] tmp;
int quotecount;
Pattern p = Pattern
.compile("(\"?([^\"]*)\"?)?,(\"?([^\"]*)\"?)?,(\"?([^\"]*)\"?)?,
(\"?([^\"]*)\"?)?");
Matcher m;
try
{
String line = br.readLine();
while (true)
{
ite = new Item();
tmp = line.toCharArray();
quotecount = 0;
for (char c : tmp)
if (c == '"') quotecount += 1;
if (quotecount % 2 != 0)
{
line += "\n";
line += br.readLine();
continue;
}
m = p.matcher(line);
m.matches();
try
{
ite.code = m.group(2);
if (ite.code.equals("")) ite.code = null;
}
catch (java.lang.IllegalStateException e)
{
ite.code = null;
}
try
{
ite.title = m.group(4);
if (ite.title.equals("")) ite.title = null;
}
catch (java.lang.IllegalStateException e)
{
ite.title = null;
}
try
{
ite.country = m.group(6);
if (ite.country.equals("")) ite.country = null;
}
catch (java.lang.IllegalStateException e)
{
ite.country = null;
}
try
{
ite.description = m.group(8);
if (ite.description.equals("")) ite.description = null;
}
catch (java.lang.IllegalStateException e)
{
ite.description = null;
}
items.add(ite);
line = br.readLine();
if (line == null) break;
}
}
catch (java.io.IOException e)
{
System.err.println("IO Exception!?!");
System.exit(2);
}
for (Item i : items)
{
System.out.println(i);
}
}
static class Item
{
String code, title, country, description;
public String toString()
{
StringBuffer sb = new StringBuffer();
sb.append(this.code);
sb.append(" ");
sb.append(this.title);
sb.append(" ");
sb.append(this.country);
sb.append(" ");
sb.append(this.description);
return sb.toString();
}
}
}