@@ -58,6 +58,10 @@ public void run(ApplicationArguments args) throws IOException {
5858 System .out .println (" delimiter character (default: \" ,\" )" );
5959 System .out .println (" --ignore-escaped-enclosure" );
6060 System .out .println (" whether ignore escape an enclosing character on writing (default: false)" );
61+ System .out .println (" --first" );
62+ System .out .println (" indicate that adding column at first position" );
63+ System .out .println (" --after" );
64+ System .out .println (" indicate that adding column at after position" );
6165 System .out .println (" --h (--help)" );
6266 System .out .println (" print help" );
6367 System .out .println ();
@@ -74,6 +78,28 @@ public void run(ApplicationArguments args) throws IOException {
7478 System .out .println (" 001,test,1,NULL" );
7579 System .out .println (" ------------------------" );
7680 System .out .println ();
81+ System .out .println (" e.g.) --command=adding-columns --dir=src/test/resources/data --files=xxx.csv,yyy.csv --column-names=item10,item11 --column-values=1,'NULL' --first" );
82+ System .out .println (" ------------------------" );
83+ System .out .println (" item1,item2" );
84+ System .out .println (" 001,test" );
85+ System .out .println (" ------------------------" );
86+ System .out .println (" ↓" );
87+ System .out .println (" ------------------------" );
88+ System .out .println (" item10,item11,item1,item2" );
89+ System .out .println (" 1,NULL,001,test" );
90+ System .out .println (" ------------------------" );
91+ System .out .println ();
92+ System .out .println (" e.g.) --command=adding-columns --dir=src/test/resources/data --files=xxx.csv,yyy.csv --column-names=item10,item11 --column-values=1,'NULL' --after=item1" );
93+ System .out .println (" ------------------------" );
94+ System .out .println (" item1,item2" );
95+ System .out .println (" 001,test" );
96+ System .out .println (" ------------------------" );
97+ System .out .println (" ↓" );
98+ System .out .println (" ------------------------" );
99+ System .out .println (" item1,item10,item11,item2" );
100+ System .out .println (" 001,1,NULL,test" );
101+ System .out .println (" ------------------------" );
102+ System .out .println ();
77103 System .out .println ("[Usage: deleting-columns]" );
78104 System .out .println (" Deleting specified existing column using column-names." );
79105 System .out .println (" e.g.) --command=deleting-columns --dir=src/test/resources/data --files=xxx.csv,yyy.csv --column-names=item2,item9" );
@@ -166,22 +192,38 @@ public void run(ApplicationArguments args) throws IOException {
166192 Boolean ignoreEscapedEnclosure = args .containsOption ("ignore-escaped-enclosure" ) &&
167193 Boolean .parseBoolean (args .getOptionValues ("ignore-escaped-enclosure" ).stream ().findFirst ().orElse (null ));
168194
169- LOGGER .info ("Start. command:{} dir:{} files:{} column-names:{} column-values:{} encoding:{} value-mappings:{} delimiter:{} ignore-escaped-enclosure:{}" ,
170- command , dir , files , columnNames , columnValues , encoding , valueMappings , delimiter , ignoreEscapedEnclosure );
195+ final String addingMethod ;
196+ final String addingTarget ;
197+ if (args .containsOption ("first" )) {
198+ addingMethod = "first" ;
199+ addingTarget = null ;
200+ } else if (args .containsOption ("after" )) {
201+ addingMethod = "after" ;
202+ addingTarget = args .getOptionValues ("after" ).stream ().findFirst ().orElse (null );
203+ if (addingTarget == null ) {
204+ throw new IllegalArgumentException ("'after' is required." );
205+ }
206+ } else {
207+ addingMethod = "last" ;
208+ addingTarget = null ;
209+ }
210+
211+ LOGGER .info ("Start. command:{} dir:{} files:{} column-names:{} column-values:{} encoding:{} value-mappings:{} delimiter:{} ignore-escaped-enclosure:{} adding-method:{} adding-target:{}" ,
212+ command , dir , files , columnNames , columnValues , encoding , valueMappings , delimiter , ignoreEscapedEnclosure , addingMethod , addingTarget );
171213
172214 Files .walk (Paths .get (dir ))
173215 .filter (Files ::isRegularFile )
174216 .filter (file -> files .stream ().anyMatch (x -> file .toString ().replace ('\\' , '/' ).endsWith (x )))
175- .sorted ().forEach (file -> execute (command , columnNames , columnValues , file , encoding , valueMappings , delimiter , ignoreEscapedEnclosure ));
217+ .sorted ().forEach (file -> execute (command , columnNames , columnValues , file , encoding , valueMappings , delimiter , ignoreEscapedEnclosure , addingMethod , addingTarget ));
176218
177219 LOGGER .info ("End." );
178220 }
179221
180- private void execute (String command , List <String > columnNames , List <String > columnValues , Path file , Charset encoding , Map <String , Object > valueMappings , String delimiter , Boolean ignoreEscapedEnclosure ) {
222+ private void execute (String command , List <String > columnNames , List <String > columnValues , Path file , Charset encoding , Map <String , Object > valueMappings , String delimiter , Boolean ignoreEscapedEnclosure , String addingMethod , String addingTarget ) {
181223 LOGGER .info ("processing file:{}" , file );
182224 switch (command ) {
183225 case "adding-columns" :
184- AddingColumnProcessor .INSTANCE .execute (columnNames , columnValues , file , encoding , valueMappings , delimiter , ignoreEscapedEnclosure );
226+ AddingColumnProcessor .INSTANCE .execute (addingMethod , addingTarget , columnNames , columnValues , file , encoding , valueMappings , delimiter , ignoreEscapedEnclosure );
185227 break ;
186228 case "deleting-columns" :
187229 DeletingColumnProcessor .INSTANCE .execute (columnNames , file , encoding , delimiter , ignoreEscapedEnclosure );
0 commit comments