@@ -57,9 +57,12 @@ int Main(int argc, const char *argv[]) {
57
57
false , 0 , " num" , cmd);
58
58
ValueArg<string> configFile (" c" , " config" , " Create indexes using json "
59
59
" config file <file>" , false , " " , " indexes" , cmd);
60
- ValueArg<string> delimiter (" d" , " delimiter" ,
61
- " Use <delim> as the field delimiter" , false , " " ,
62
- " delim" , cmd);
60
+ ValueArg<string> delimiterArg (
61
+ " d" , " delimiter" , " Use <delim> as the field delimiter" , false , " " ,
62
+ " delim" , cmd);
63
+ SwitchArg tabDelimiterArg (
64
+ " " , " tab-delimiter" , " Use a tab character as the field delimiter" ,
65
+ cmd);
63
66
ValueArg<string> externalIndexer (
64
67
" p" , " pipe" ,
65
68
" Create indices by piping output through <CMD> which should output "
@@ -99,12 +102,20 @@ int Main(int argc, const char *argv[]) {
99
102
if (skipFirst.isSet ())
100
103
builder.skipFirst (skipFirst.getValue ());
101
104
102
- Index::IndexConfig config{ };
105
+ Index::IndexConfig config{};
103
106
config.numeric = numeric.isSet ();
104
107
config.unique = unique.isSet ();
105
108
config.sparse = sparse.isSet ();
106
109
// config.indexLineOffsets = // TODO - add command line flag if desired
107
110
111
+ auto delimiter = delimiterArg.getValue ();
112
+ if (tabDelimiterArg.isSet () && delimiterArg.isSet ()) {
113
+ log .error (" Cannot set both --delimiter and --tab-delimiter" );
114
+ return 1 ;
115
+ }
116
+ if (tabDelimiterArg.isSet ())
117
+ delimiter = " \t " ;
118
+
108
119
if (configFile.isSet ()) {
109
120
auto indexParser = IndexParser (configFile.getValue ());
110
121
indexParser.buildIndexes (&builder, log );
@@ -123,18 +134,18 @@ int Main(int argc, const char *argv[]) {
123
134
if (field.isSet ()) {
124
135
ostringstream name;
125
136
name << " Field " << field.getValue () << " delimited by '"
126
- << delimiter. getValue () << " '" ;
137
+ << delimiter << " '" ;
127
138
builder.addIndexer (" default" , name.str (), config,
128
139
std::unique_ptr<LineIndexer>(
129
140
new FieldIndexer (
130
- delimiter. getValue () ,
141
+ delimiter,
131
142
field.getValue ())));
132
143
}
133
144
if (externalIndexer.isSet ()) {
134
145
auto indexer = std::unique_ptr<LineIndexer>(
135
146
new ExternalIndexer (log ,
136
147
externalIndexer.getValue (),
137
- delimiter. getValue () ));
148
+ delimiter));
138
149
builder.addIndexer (" default" , externalIndexer.getValue (),
139
150
config, std::move (indexer));
140
151
}
0 commit comments