@@ -9,10 +9,12 @@ use quick_xml::events::Event;
9
9
use yaml_rust:: YamlLoader ;
10
10
11
11
#[ derive( Debug ) ]
12
- struct Column {
12
+ struct Column < ' a > {
13
13
name : String ,
14
14
path : String ,
15
15
value : String ,
16
+ search : Option < & ' a str > ,
17
+ replace : Option < & ' a str > ,
16
18
raw : bool
17
19
}
18
20
@@ -41,14 +43,16 @@ fn main() {
41
43
let mut columns = Vec :: new ( ) ;
42
44
43
45
for col in colspec {
44
- let name = col[ "name" ] . as_str ( ) . unwrap ( ) ;
46
+ let name = col[ "name" ] . as_str ( ) . expect ( "Column has no 'name' entry in configuration file" ) ;
47
+ let search = col[ "search" ] . as_str ( ) ;
48
+ let replace = col[ "replace" ] . as_str ( ) ;
45
49
let mut raw = false ;
46
50
if !col[ "raw" ] . is_badvalue ( ) { raw = col[ "raw" ] . as_bool ( ) . unwrap ( ) }
47
51
let colpath = col[ "path" ] . as_str ( ) . unwrap ( ) ;
48
- // println! ("Column name {} path {}", name, colpath);
52
+ // if search != None && replace != None { eprintln! ("Column name {} search {} replace {} ", name, search.unwrap(), replace.unwrap()); }
49
53
let mut path = String :: from ( rowpath) ;
50
54
path. push_str ( colpath) ;
51
- columns. push ( Column { name : name. to_string ( ) , path : path , value : String :: new ( ) , raw : raw } ) ;
55
+ columns. push ( Column { name : name. to_string ( ) , path, value : String :: new ( ) , search , replace , raw } ) ;
52
56
}
53
57
54
58
let mut raw = false ;
@@ -81,7 +85,7 @@ fn main() {
81
85
}
82
86
for i in 0 ..columns. len ( ) {
83
87
if path == columns[ i] . path {
84
- columns[ i] . value . push_str ( & e. unescape_and_decode ( & reader) . unwrap ( ) ) ;
88
+ columns[ i] . value . push_str ( & e. unescape_and_decode ( & reader) . unwrap ( ) . replace ( " \\ " , " \\ \\ " ) ) ;
85
89
}
86
90
}
87
91
} ,
@@ -91,6 +95,9 @@ fn main() {
91
95
if i > 0 { print ! ( "\t " ) ; }
92
96
if columns[ i] . value . is_empty ( ) { print ! ( "\\ N" ) ; }
93
97
else {
98
+ if columns[ i] . search != None && columns[ i] . replace != None {
99
+ columns[ i] . value = columns[ i] . value . replace ( columns[ i] . search . unwrap ( ) , columns[ i] . replace . unwrap ( ) ) ;
100
+ }
94
101
print ! ( "{}" , columns[ i] . value) ;
95
102
columns[ i] . value . clear ( ) ;
96
103
}
@@ -104,6 +111,9 @@ fn main() {
104
111
for i in 0 ..columns. len ( ) {
105
112
if path == columns[ i] . path {
106
113
raw = false ;
114
+ if columns[ i] . search != None && columns[ i] . replace != None {
115
+ rawstr = rawstr. replace ( columns[ i] . search . unwrap ( ) , columns[ i] . replace . unwrap ( ) ) ;
116
+ }
107
117
columns[ i] . value . push_str ( & rawstr) ;
108
118
rawstr. clear ( ) ;
109
119
break ;
0 commit comments