diff --git a/src/basic/vx_log/str_wrappers.cc b/src/basic/vx_log/str_wrappers.cc index 79578d4362..7606f2a7d7 100644 --- a/src/basic/vx_log/str_wrappers.cc +++ b/src/basic/vx_log/str_wrappers.cc @@ -17,6 +17,12 @@ using namespace std; #include "str_wrappers.h" +//////////////////////////////////////////////////////////////////////// + +bool is_whitespaces(char cur_char) { + return (' ' == cur_char || '\t' == cur_char || '\n' == cur_char || '\r' == cur_char); +} + //////////////////////////////////////////////////////////////////////// int m_strlen(const char *str) { @@ -109,7 +115,22 @@ void m_strncpy(char *to_str, const char *from_str, const int buf_len, //////////////////////////////////////////////////////////////////////// -void m_rstrip(char *str_buf, int buf_len) { +bool m_replace_char(char *str_buf, char from_ch, char to_ch, bool all_instances) { + bool replaced = false; + int str_len = m_strlen(str_buf); + for(int idx=0; idx= 0) str_buf[buf_len] = '\0'; // Change the trailing blank space to a null @@ -119,13 +140,8 @@ void m_rstrip(char *str_buf, int buf_len) { str_buf[idx] = '\0'; if((idx > 0) && !is_whitespaces(str_buf[idx-1])) break; } + else if (!find_white_ch) break; } } //////////////////////////////////////////////////////////////////////// - -bool is_whitespaces(char cur_char) { - return (' ' == cur_char || '\t' == cur_char || '\n' == cur_char || '\r' == cur_char); -} - -//////////////////////////////////////////////////////////////////////// diff --git a/src/basic/vx_log/str_wrappers.h b/src/basic/vx_log/str_wrappers.h index 579f702b4e..dfc2188447 100644 --- a/src/basic/vx_log/str_wrappers.h +++ b/src/basic/vx_log/str_wrappers.h @@ -27,7 +27,10 @@ extern void m_strncpy(char *to_str, const char *from_str, const int buf_len, const char *method_name, const char *extra_msg=(char *)0, bool truncate=false); -extern void m_rstrip(char *str_buf, const int buf_len=-1); +extern void m_rstrip(char *str_buf, const int buf_len=-1, bool find_white_ch=true); + +extern bool m_replace_char(char *str_buf, char from_ch, char to_ch, + bool all_instances=true); extern bool is_whitespaces(char cur_char); diff --git a/src/basic/vx_util/observation.cc b/src/basic/vx_util/observation.cc index 68f5646f86..c401418aa1 100644 --- a/src/basic/vx_util/observation.cc +++ b/src/basic/vx_util/observation.cc @@ -52,6 +52,11 @@ Observation::Observation(const string &header_type, const string &station_id, _height(height_m), _value(value) { + +string::iterator it = _stationId.begin(); +while (' ' == *it) it++; // skip leading spaces +std::replace(it, _stationId.end(), ' ', '_'); + } diff --git a/src/tools/other/ioda2nc/ioda2nc.cc b/src/tools/other/ioda2nc/ioda2nc.cc index 5007a7384f..90c6c75c34 100644 --- a/src/tools/other/ioda2nc/ioda2nc.cc +++ b/src/tools/other/ioda2nc/ioda2nc.cc @@ -692,7 +692,8 @@ void process_ioda_file(int i_pb) { if(has_station_id) { char tmp_sid[nstring+1]; m_strncpy(tmp_sid, hdr_station_ids+(i_read*nstring), nstring, method_name_s, "tmp_sid"); - m_rstrip(tmp_sid, nstring); + m_rstrip(tmp_sid, nstring, false); + m_replace_char(tmp_sid, ' ', '_'); hdr_sid = tmp_sid; } else hdr_sid.clear();