00001
00002
00003 #ifdef English_dox
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifdef Spanish_dox
00012
00013
00014
00015
00016
00017 #endif
00018
00019 #include "CSV_line.h"
00020
00021 #include <sstream>
00022
00023 void CSV_line::setData( const std::string & str ) {
00024 std::vector<std::string>& VEC = (*this);
00025
00026 {{
00027 VEC.clear();
00028 std::string csv;
00029 bool eol_CIN = false;
00030 std::istringstream ist( str , std::ios::binary );
00031 while ( ! eol_CIN && ! ist.fail() ) {
00032 eol_CIN = getNextCSV( csv, ist );
00033 VEC.push_back( csv );
00034 }
00035 return;
00036
00037 }}
00038 }
00039
00040 void CSV_line::setData( const char *str , size_t n ) {
00041 #if 1
00042 n = ( n>0 ? n : strlen( str ) );
00043 std::string st; st.assign( str, n );
00044 setData( st );
00045 return;
00046 #else
00047 realSetData( m_DATA, str, n );
00048 return size();
00049 #endif
00050
00051 #if 0
00052
00053 clear();
00054 std::string valor;
00055 std::string::size_type len = str.size();
00056 std::string::size_type last, i = 0;
00057 int n = 0, pos = 0;
00058 while ( i<len ) {
00059 last = str.find( ',' , i );
00060 if (last == std::string::npos) {
00061 valor = str.substr(i, len-i);
00062 i = len;
00063 }
00064 else {
00065 valor = str.substr(i, last-i);
00066 i = last+1;
00067 }
00068
00069 trim( valor );
00070 if ( valor != "" ) {
00071 m_DATA[ pos ] = valor;
00072 ++n;
00073 }
00074 pos++;
00075 }
00076 return pos;
00077 #endif
00078 }
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108 #if 0 // DEPRECATED
00109
00110
00111 void realSetData( std::vector<std::string> & DATA, const char *str , size_t n ) {
00112 size_t N = ( n>0 ? n : strlen( str ) );
00113 size_t i=0; int state=0; n = 0;
00114 DATA.clear(); DATA.push_back("");
00115
00116
00117
00118 while( i<N ) {
00119 switch (state) {
00120 case 0: {
00121 if ( str[i] == COMMA ) {
00122 ++n; DATA.push_back(""); ++i;
00123
00124 }
00125 else if ( str[i] == LF ) {
00126 if ( i+1 == N ) {
00127 chop( DATA[n], CR );
00128 i = N;
00129 }
00130 else {
00131 ++n; DATA.push_back(""); ++i;
00132 }
00133
00134 }
00135 else if ( str[i] == DQUOTE ) {
00136 ++i;
00137 state = 1;
00138 }
00139 else {
00140 DATA[n] += str[i]; ++i;
00141 state = 3;
00142 }
00143 }
00144 break;
00145
00146 case 1: {
00147
00148
00149
00150
00151 if ( str[i] == DQUOTE ) {
00152 ++i;
00153 state = 2;
00154 }
00155
00156
00157
00158
00159 else {
00160 DATA[n] += str[i]; ++i;
00161
00162 }
00163 }
00164 break;
00165
00166 case 2: {
00167 if ( str[i] == COMMA ) {
00168 ++n; DATA.push_back(""); ++i;
00169 state = 0;
00170 }
00171 else if ( str[i] == DQUOTE ) {
00172 DATA[n] += str[i]; ++i;
00173 state = 1;
00174 }
00175
00176
00177
00178
00179
00180
00181 else if ( str[i] == CR ) {
00182 bool LF_is_last = false;
00183 if ( i == N-2 ) {
00184 if ( str[i+1] == LF ) {
00185 LF_is_last = true;
00186 }
00187 }
00188 if ( ! LF_is_last ) {
00189 rebuildDquote( DATA[n] );
00190 DATA[n] = DQUOTE + DATA[n] + str[i]; ++i;
00191 state = 3;
00192 }
00193 }
00194 else {
00195 rebuildDquote( DATA[n] );
00196 DATA[n] = DQUOTE + DATA[n] + DQUOTE + str[i]; ++i;
00197 state = 3;
00198 }
00199 }
00200 break;
00201
00202 case 3: {
00203 if ( str[i] == COMMA ) {
00204 ++n; DATA.push_back(""); ++i;
00205 state = 0;
00206 }
00207
00208
00209
00210
00211 else if ( str[i] == LF ) {
00212 if ( i+1 == N ) {
00213 chop( DATA[n], CR );
00214 i = N;
00215 }
00216 else {
00217 ++n; DATA.push_back(""); ++i;
00218 state = 0;
00219 }
00220 }
00221 else {
00222 DATA[n] += str[i]; ++i;
00223
00224 }
00225 }
00226 break;
00227 }
00228 }
00229 return;
00230 }
00231
00232 #endif
00233
00234