2
2
# no automatic type inference is done, but types are allowed to be passed
3
3
# for as many columns as desired; `CSV.detect(row, i)` can also be used to
4
4
# use the same inference logic used in `CSV.File` for determing a cell's typed value
5
- struct Rows{transpose, O, IO, T}
5
+ struct Rows{transpose, O, IO, T, F }
6
6
name:: String
7
7
names:: Vector{Symbol} # only includes "select"ed columns
8
8
finaltypes:: Vector{Type} # only includes "select"ed columns
@@ -22,6 +22,8 @@ struct Rows{transpose, O, IO, T}
22
22
positions:: Vector{Int64}
23
23
reusebuffer:: Bool
24
24
tapes:: Vector{AbstractVector}
25
+ filter:: F
26
+ codes:: Vector{Int16}
25
27
lookup:: Dict{Symbol, Int}
26
28
end
27
29
@@ -99,6 +101,7 @@ function Rows(source;
99
101
ignoreemptylines:: Bool = false ,
100
102
select= nothing ,
101
103
drop= nothing ,
104
+ filter= nothing ,
102
105
# parsing options
103
106
missingstrings= String[],
104
107
missingstring= " " ,
@@ -135,7 +138,8 @@ function Rows(source;
135
138
deleteat! (finaltypes, h. todrop)
136
139
deleteat! (columnmap, h. todrop)
137
140
lookup = Dict (nm=> i for (i, nm) in enumerate (h. names))
138
- return Rows {transpose, typeof(h.options), typeof(h.buf), typeof(h.customtypes)} (
141
+ codes = filter === nothing ? EMPTY_CODES : zeros (Int16, h. cols)
142
+ return Rows {transpose, typeof(h.options), typeof(h.buf), typeof(h.customtypes), typeof(filter)} (
139
143
h. name,
140
144
h. names,
141
145
finaltypes,
@@ -155,6 +159,8 @@ function Rows(source;
155
159
h. positions,
156
160
reusebuffer,
157
161
tapes,
162
+ filter,
163
+ codes,
158
164
lookup,
159
165
)
160
166
end
@@ -172,7 +178,7 @@ const EMPTY_REFS = RefPool[]
172
178
(pos > len || row > r. limit) && return nothing
173
179
pos > len && return nothing
174
180
tapes = r. reusebuffer ? r. tapes : allocate (1 , r. cols, r. types, r. flags)
175
- pos = parserow (1 , Val (transpose), r. cols, EMPTY_TYPEMAP, tapes, r. datapos, r. buf, pos, len, r. positions, 0.0 , EMPTY_REFS, 1 , r. datarow + row - 2 , r. types, r. flags, false , r. options, r. coloptions, r. customtypes)
181
+ pos = parserow (1 , Val (transpose), r. cols, EMPTY_TYPEMAP, tapes, r. datapos, r. buf, pos, len, r. positions, 0.0 , EMPTY_REFS, 1 , r. datarow + row - 2 , r. types, r. flags, r . filter, r . names, r . codes, false , r. options, r. coloptions, r. customtypes)
176
182
return Row2 (r. names, r. finaltypes, r. columnmap, r. types, r. lookup, tapes, r. buf, r. e, r. options, r. coloptions), (pos, len, row + 1 )
177
183
end
178
184
0 commit comments