Skip to content

Commit

Permalink
working version
Browse files Browse the repository at this point in the history
  • Loading branch information
rinmalavi committed Feb 15, 2012
1 parent e0265c8 commit 631755b
Show file tree
Hide file tree
Showing 7 changed files with 73 additions and 115 deletions.
Binary file modified csvs/test1.csv
Binary file not shown.
4 changes: 2 additions & 2 deletions doit-csv/src/main/scala/hr/element/doit/csv/CSVFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,9 @@ public CSVFactory setQuotes(final char quotes) {

// ----------------------------------------------------

public CSVWriterJava getWriter(final OutputStream oS) {
public CSVWriter getWriter(final OutputStream oS) {
Writer w = new OutputStreamWriter(oS, encoding);
return new CSVWriterJava(this, w);
return new CSVWriter(this, w);
}

// -----------------------------------------------------
Expand Down
40 changes: 40 additions & 0 deletions doit-csv/src/main/scala/hr/element/doit/csv/CSVWriter.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package hr.element.doit.csv
import java.io.Writer

class CSVWriter(config: CSVFactory, w: Writer) {

def write(line: Array[String]) {
if ((line == null)||(line.length == 0)){
this
} else {
for(i <- line.indices) {
w.write(parse(line(i)))
if(i != line.length-1) w.write(config.delimiter)
}
w.write(config.newLine)
}

// def parse2(l: String){
// val quoteNum =
// while()
// }


def parse(l: String) = {
if( List(config.quotes,
config.newLine,
config.delimiter)
.exists(l.contains)){
val dubleQuote = config.quotes + config.quotes
config.quotes +
l.replaceAll(config.quotes, dubleQuote) +
config.quotes
} else {
l
}
}

}
def close() { w.close()}

}
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ private String getStringToWrite(final String value) {
final boolean hasDelimiter = -1 != value.indexOf(config.delimiter);
int valuePivot = -1;
while(true){
valuePivot = value.indexOf(config.quotes, valuePivot + 1);
valuePivot = value.indexOf(config.quotes, valuePivot + config.quotes.length());
if(valuePivot == -1) break ;
quoteCount++;
}
Expand Down
95 changes: 3 additions & 92 deletions doit-csv/src/main/scala/hr/element/doit/csv/LineReader.scala
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ class LineReader(config: CSVFactory, reader: Reader) extends Traversable[String]
val read = reader.read()

//println
println( "loop: " + curr + " " + stringMode(mode)+" read :"+read.toChar+"| uc"+read+"|")
//println( "loop: " + curr + " " + stringMode(mode)+" read :"+read.toChar+"| uc"+read+"|")
//res.foreach(x => println("res> "+ x ))

if (read == -1){ // End Of File
Expand All @@ -128,7 +128,7 @@ class LineReader(config: CSVFactory, reader: Reader) extends Traversable[String]
returnResult match {
case Delimiter =>
curr.append(sliM.flush())
println("delblibliteretarterd: " + curr+" length: "+ curr.length)
//println("delblibliteretarterd: " + curr+" length: "+ curr.length)
res += curr.result()
loop(conv(mode, Delimiter))

Expand All @@ -154,95 +154,6 @@ class LineReader(config: CSVFactory, reader: Reader) extends Traversable[String]
res.toList
}



def foreach[U](f: String => U) = words.foreach(f) //util.Random.shuffle(words).foreach(f)

// @tailrec
// def loop(
// qoutedMode: Boolean = false,
// qoutedValue: Boolean = false,
// curr: StringBuilder = new StringBuilder()) {
//
// val read = reader.read()
//
// val reedChar = read.toChar
// println("lr>"+reedChar+" "+curr)
// if (read == -1) {
// if(qoutedMode)
// sys.error("Malformated CSV")
// if (curr.nonEmpty)
// res += (curr ++= quoteM.flush()).result
// else
// res
// } else {
// val qouteConsumeRes = quoteM.consume(reedChar)
// if (qoutedMode) {
//
// qouteConsumeRes match {
//
// case Delimiter =>
// flushAll()
// loop(false, true, curr)
//
// case Ch3(x) =>
// loop(true, true, curr += x)
//
// case Cooldown =>
// loop(true, true, curr)
//
// case _ =>
// sys.error("Could not happen 0!")
// }
// } else { // !qoutedMode
// qouteConsumeRes match {
// case Delimiter =>
// flushAll()
// if (qoutedValue)
// loop(true, true, curr.append(quote))
// else
// if (curr.isEmpty)
// loop(true, true)
//
// else
// sys.error("Malformated CSV")
// case Ch3(_) | Cooldown =>
// newLineM.consume(reedChar) match {
// case Delimiter =>
// //
// res += curr.result
// case Ch3(_) | Cooldown =>
// delimiterM.consume(reedChar) match {
// case Delimiter =>
//
// flushAll()
// res += curr.result
// loop(false, false) // new Value
//
// case Ch3(x) =>
// if (qoutedValue)
// sys.error("Malformed CSV")
// else
// loop(false, qoutedValue, curr += x)
//
// case Cooldown =>
// loop(false, qoutedValue, curr)
// case _ =>
// sys.error("Could not happen 1!")
// } // end delimiter match
// case _ =>
// sys.error("Could not happen 2!")
// } // end newLine match
// case _ =>
// sys.error("Could not happen 3!")
// } //end quote match
// }
// }
// }
//
// loop()
// //for (s <- res) println("lr > " + s)
// res.toList
// }
def foreach[U](f: String => U) = words.foreach(f)

}
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ class CyclicCharacterMatcher(
last.drop(head) ++ last.take(tail + 1)
else
last.drop(head).take(length)
println("r:"+readPoint+"c"+buffTake+": "+ new String(sub) + " : " + new String(refArray)+ " last:" +new String(last))
//println("r:"+readPoint+"c"+buffTake+": "+ new String(sub) + " : " + new String(refArray)+ " last:" +new String(last))
sub sameElements refArray //revolver(0)
}
}
Expand Down Expand Up @@ -139,10 +139,9 @@ class CyclicCharacterMatcher(

def flush(): Array[Char] = {

val tail = writePoint //+ last.length ) % last.length
val tail = writePoint
val head = (tail + last.length - buffTake) % last.length

println("f: " + buffTake+" head = "+head+" tail:"+tail+" dif:"+ (tail - head))
//println("f: " + buffTake+" head = "+head+" tail:"+tail+" dif:"+ (tail - head))

if (head > tail)
last.drop(head) ++ last.take(tail)
Expand All @@ -157,7 +156,6 @@ class CyclicCharacterMatcher(
// last.drop(head).take(tail)
// else
// last.drop(head + 1 ).take(tail - head)

}
}

Expand Down
39 changes: 24 additions & 15 deletions doit-csv/src/test/scala/hr/element/doit/csv/Test1.scala
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,19 @@ class ExampleSuite extends GivenWhenThen

scenario("simple Test") {
val outFileName = "/home/marin/doit/csvs/test1.csv"
for (i <- 517 to 517) {
val startCase = 517
val endCase = 557
val rowMod = (i: Int) => (i)
val colMod = (i:Int ) =>(i / 60)
val strSize = 120
val numOfQuotes = (i:Int) => i/70


for (i <- startCase to endCase) {
val delimiter = (i * 127).toString()
val newLine = (i * 25).toString()
val quotes = (i * 3).toString()
info("deli: " + delimiter + ", nL" + newLine + ", q " + quotes)
//info("deli: " + delimiter + ", nL" + newLine + ", q " + quotes)
if (delimiter.contains(quotes) ||
delimiter.contains(newLine) ||
quotes.contains(newLine) ||
Expand All @@ -49,16 +57,17 @@ class ExampleSuite extends GivenWhenThen
setNewLine(newLine).
setQuotes(quotes)

/*val rand = new Random(i)
val rand = new Random(i)
val writer = factory.getWriter(new FileOutputStream(outFileName))
for (j <- 1 to (i)) { // redovi
for (j <- 1 to rowMod(i)) { // redovi


val str =
for (k <- 1 to i / 90) yield {
for (k <- 1 to colMod(i)) yield {
val str = new StringBuilder(
rand.nextString(rand.nextInt().abs % 20 + 4))
rand.nextString(rand.nextInt().abs % strSize + 4))
val l = str.length
for (l <- 1 to i / 170) {
for (l <- 1 to numOfQuotes(i)) {
str.insert((rand.nextInt().abs % l + 3), quotes)
}
str.result()
Expand All @@ -70,20 +79,20 @@ class ExampleSuite extends GivenWhenThen

}

writer.close()*/info("Starting test :" + i)
writer.close()
val time = System.currentTimeMillis()
val r = new Random(i)
val f = new File(outFileName)
info("File size: " + f.length())
info("Starting test :" + i+ "File size: " + f.length())
val reader = factory.getReader(new FileInputStream(f))
while (reader.hasNext()) {
val lr = reader.next()
lr.foreach(
/*lr.foreach(
x => {
val str = new StringBuilder(
r.nextString(r.nextInt().abs % 20 + 4))
r.nextString(r.nextInt().abs % strSize + 4))
val l = str.length
for (l <- 1 to i / 170) {
for (l <- 1 to numOfQuotes(i)) {
str.insert((r.nextInt().abs % l + 3), quotes)
}
Expand All @@ -92,7 +101,7 @@ class ExampleSuite extends GivenWhenThen
}*/
//println(x)
//println(str.result)
if (x.length==31) x.foreach(y=> println("|>"+y+"<|"+ y.toInt))
//if (x.length==31) x.foreach(y=> println("|>"+y+"<|"+ y.toInt))
x should equal(str.result())
/*for (z <- 0 to x.length() - 1) {
try {
Expand All @@ -104,9 +113,9 @@ class ExampleSuite extends GivenWhenThen
}
}*/
})
})*/
}
info("time: " + (System.currentTimeMillis() - time))
info(" time: " + (System.currentTimeMillis() - time))

}
}
Expand Down

0 comments on commit 631755b

Please sign in to comment.