00001
00002
00003
00004
00005
00006
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include <config.h>
00019 #include <iostream>
00020 #include "ParserEventGeneratorKit.h"
00021 #include "SGMLApplication.h"
00022 #include <time.h>
00023 #include <string>
00024 #include <locale.h>
00025 #include "messages.hh"
00026 #include "ofx_utilities.hh"
00027
00028 using namespace std;
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060 string CharStringtostring(const SGMLApplication::CharString source, string &dest)
00061 {
00062 size_t i;
00063 dest.assign("");
00064
00065 for (i = 0; i < source.len; i++){
00066 dest+=(char)(((source.ptr)[i]));
00067
00068 }
00069 return dest;
00070 }
00071
00072 string AppendCharStringtostring(const SGMLApplication::CharString source, string &dest)
00073 {
00074 size_t i;
00075 for (i = 0; i < source.len; i++)
00076 {
00077 dest+=(char)(((source.ptr)[i]));
00078 }
00079 return dest;
00080 }
00081
00097 time_t ofxdate_to_time_t(const string ofxdate)
00098 {
00099 struct tm time;
00100 double local_offset;
00101 float ofx_gmt_offset;
00102 char timezone[4];
00103 char exact_time_specified = false;
00104 char time_zone_specified = false;
00105
00106 time_t temptime;
00107 std::time(&temptime);
00108 local_offset = difftime(mktime(localtime(&temptime)), mktime(gmtime(&temptime)));
00109
00110 if(ofxdate.size()!=0){
00111 time.tm_year=atoi(ofxdate.substr(0,4).c_str())-1900;
00112 time.tm_mon=atoi(ofxdate.substr(4,2).c_str())-1;
00113 time.tm_mday=atoi(ofxdate.substr(6,2).c_str());
00114 if(ofxdate.size()>8) {
00115
00116 exact_time_specified = true;
00117 time.tm_hour=atoi(ofxdate.substr(8,2).c_str());
00118 time.tm_min=atoi(ofxdate.substr(10,2).c_str());
00119 time.tm_sec=atoi(ofxdate.substr(12,2).c_str());
00120 }
00121
00122
00123 string::size_type startidx = ofxdate.find("[");
00124 string::size_type endidx;
00125 if(startidx!=string::npos){
00126
00127 time_zone_specified = true;
00128 startidx++;
00129 endidx = ofxdate.find(":", startidx)-1;
00130 ofx_gmt_offset=atof(ofxdate.substr(startidx,(endidx-startidx)+1).c_str());
00131 startidx = endidx+2;
00132 strncpy(timezone,ofxdate.substr(startidx,3).c_str(),4);
00133 }
00134 else{
00135
00136 ofx_gmt_offset=0;
00137 strcpy(timezone, "GMT");
00138 }
00139
00140 if(time_zone_specified == true)
00141 {
00142
00143
00144
00145 time.tm_sec = time.tm_sec + (int)(local_offset - (ofx_gmt_offset*60*60));
00146 }
00147 else if (exact_time_specified == false)
00148 {
00149
00150 time.tm_hour=11;
00151 time.tm_min=59;
00152 time.tm_sec=0;
00153 }
00154 }
00155 else{
00156 message_out(ERROR, "ofxdate_to_time_t(): Unable to convert time, string is 0 length!");
00157 }
00158 return mktime(&time);
00159 }
00160
00165 double ofxamount_to_double(const string ofxamount)
00166 {
00167
00168 string::size_type idx;
00169 string tmp = ofxamount;
00170
00171 idx = tmp.find(',');
00172 if(idx==string::npos){
00173 idx = tmp.find('.');
00174 }
00175
00176 if(idx!=string::npos){
00177 tmp.replace(idx,1,1,((localeconv())->decimal_point)[0]);
00178 }
00179
00180 return atof(tmp.c_str());
00181 }
00182
00186 string strip_whitespace(const string para_string)
00187 {
00188 size_t index;
00189 size_t i;
00190 string temp_string = para_string;
00191 char *whitespace = " \b\f\n\r\t\v";
00192 char *abnormal_whitespace = "\b\f\n\r\t\v";
00193 message_out(DEBUG4,"strip_whitespace() Before: |"+temp_string+"|");
00194 for(i=0;i<=temp_string.size()&&temp_string.find_first_of(whitespace, i)==i&&temp_string.find_first_of(whitespace, i)!=string::npos;i++);
00195 temp_string.erase(0,i);
00196 for(i=temp_string.size()-1;(i>=0)&&(temp_string.find_last_of(whitespace, i)==i)&&(temp_string.find_last_of(whitespace, i)!=string::npos);i--);
00197 temp_string.erase(i+1,temp_string.size()-(i+1));
00198
00199 while ((index = temp_string.find_first_of(abnormal_whitespace))!=string::npos)
00200 {
00201 temp_string.erase(index,1);
00202 };
00203
00204 message_out(DEBUG4,"strip_whitespace() After: |"+temp_string+"|");
00205
00206 return temp_string;
00207 }