Skip to content

Commit 30e3da9

Browse files
committed
return the fields instead of modifying them
1 parent ed38522 commit 30e3da9

File tree

1 file changed

+15
-12
lines changed

1 file changed

+15
-12
lines changed

src/rust-csv/lib.rs

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,9 @@ impl rowiter for rowreader {
135135
self.offset = 0u;
136136
}
137137

138-
if row_from_buf(self, &row) {
138+
let temp = row_from_buf(self);
139+
if (temp.len() != 0) {
140+
vec::append(row, temp);
139141
let buflen = self.buffers.len();
140142
if buflen > 1u {
141143
self.buffers = ~[self.buffers[buflen-1u]];
@@ -162,7 +164,8 @@ impl rowiter for rowreader {
162164
}*/
163165
}
164166

165-
fn row_from_buf(current: &mut rowreader, fields: &~[~str]) -> bool {
167+
fn row_from_buf(current: &mut rowreader) -> ~[~str] {
168+
let mut fields:~[~str] = ~[];
166169
let cbuffer = current.buffers.len() - 1u;
167170
let buf = current.buffers[cbuffer];
168171
while current.offset < buf.len() {
@@ -177,24 +180,24 @@ fn row_from_buf(current: &mut rowreader, fields: &~[~str]) -> bool {
177180
current.state = inquotedfield(cbuffer, coffset);
178181
} else if c == '\n' {
179182
if after_delim {
180-
vec::append(*fields, [decode(&current.buffers, emptyfield, current.quote)]);
183+
vec::append(fields, [decode(&current.buffers, emptyfield, current.quote)]);
181184
}
182-
return true;
185+
return fields;
183186
} else if c == current.delim {
184187
current.state = fieldstart(true);
185-
vec::append(*fields, [decode(&current.buffers, emptyfield, current.quote)]);
188+
vec::append(fields, [decode(&current.buffers, emptyfield, current.quote)]);
186189
} else {
187190
current.state = infield(cbuffer, coffset);
188191
}
189192
}
190193
infield(b,o) => {
191194
debug!("field : {} {}", b, o);
192195
if c == '\n' {
193-
vec::append(*fields, [decode(&current.buffers, new_bufferfield(current, false, b, o, coffset), current.quote)]);
194-
return true;
196+
vec::append(fields, [decode(&current.buffers, new_bufferfield(current, false, b, o, coffset), current.quote)]);
197+
return fields;
195198
} else if c == current.delim {
196199
current.state = fieldstart(true);
197-
vec::append(*fields, [decode(&current.buffers, new_bufferfield(current, false, b, o, coffset), current.quote)]);
200+
vec::append(fields, [decode(&current.buffers, new_bufferfield(current, false, b, o, coffset), current.quote)]);
198201
}
199202
}
200203
inquotedfield(b, o) => {
@@ -206,20 +209,20 @@ fn row_from_buf(current: &mut rowreader, fields: &~[~str]) -> bool {
206209
inquote(b, o) => {
207210
debug!("inquote : {} {}", b, o);
208211
if c == '\n' {
209-
vec::append(*fields, [decode(&current.buffers, new_bufferfield(current, true, b, o, coffset), current.quote)]);
210-
return true;
212+
vec::append(fields, [decode(&current.buffers, new_bufferfield(current, true, b, o, coffset), current.quote)]);
213+
return fields;
211214
} else if c == current.quote {
212215
current.state = inquotedfield(b, o);
213216
} else if c == current.delim {
214217
current.state = fieldstart(true);
215-
vec::append(*fields, [decode(&current.buffers, new_bufferfield(current, true, b, o, coffset), current.quote)]);
218+
vec::append(fields, [decode(&current.buffers, new_bufferfield(current, true, b, o, coffset), current.quote)]);
216219
}
217220
// swallow odd chars, eg. space between field and "
218221
}
219222
}
220223
debug!("now {}", statestr(current.state));
221224
}
222-
return false;
225+
return ~[];
223226
}
224227

225228
fn new_bufferfield(cur: &rowreader, escaped: bool, sb: uint, so: uint, eo: uint) -> fieldtype {

0 commit comments

Comments
 (0)