int CCurveLine::InititalCurv( char* data ) { PointNum = 0; data = data + 10; for(int i = 0;data[i] != '\0' ;i++) { if(data[i] == ',') PointNum++; } //将最后一个添加进去 PointNum++; PointData = new double[PointNum]; for(int i = 0;i < PointNum;i++) { PointData[i] = 0; } int str_idx = 0; for(int i = 0;i < PointNum;i++) { char* SubStr = (i==(PointNum-1))?GetSubString(data,str_idx,'\0'):GetSubString(data,str_idx,','); PointData[i] = StringDecode(SubStr,0); //PointData[i] = atoi(SubStr); str_idx += strlen(SubStr)+1; } return 1; }
JSON* GetItemInJSON(JSON *json, const char *path) { JSON *rtn = NULL; JSON *next_json = NULL; if (path[0] != '/') { printf("Exception: Invalid path format.\n"); return NULL; } if (strcmp("/", path) == 0) { return json; } char *sub_s = GetSubString(path, 1, strlen(path) - 1); char *next_slash = strchr(sub_s, '/'); if (next_slash == NULL) { switch (json->type) { case JSON_ARRAY: rtn = GetItemInArray(json, atoi(sub_s)); break; case JSON_OBJECT: rtn = GetItemInObject(json, sub_s); break; } free(sub_s); return rtn; } else { char *search_item_key = GetSubString(sub_s, 0, next_slash - sub_s); char *search_item_path = GetSubString(next_slash, 0, strlen(next_slash)); switch (json->type) { case JSON_ARRAY: next_json = GetItemInArray(json, atoi(search_item_key)); case JSON_OBJECT: next_json = GetItemInObject(json, search_item_key); } rtn = GetItemInJSON(next_json, search_item_path); free(search_item_key); free(search_item_path); free(sub_s); return rtn; } return NULL; }
void psXMLTag::GetTagName( psString& str) { size_t i=1; const char *myData = GetData(); while ( i < Size && !isspace(myData[i]) && myData[i] != '>') i++; GetSubString(str, 1,i); }
size_t psXMLString::GetTagSection(int start, const char* tagName, psXMLString& tagSection) { size_t end = FindMatchingEndTag(start, tagName); if ( end == (size_t)-1 ) tagSection = ""; else GetSubString(tagSection, start, end+strlen(tagName)+3); return tagSection.Length(); }
size_t psXMLString::GetTag( int start, psXMLTag& tag ) { psString tmp(">"); int end = FindSubString(tmp, start); if ( end == -1 ) tag.Empty(); else GetSubString(tag, start, end+1); return tag.Length(); }
size_t psXMLString::GetWithinTagSection(int start, const char* tagName, psXMLString& tagSection) { size_t end = FindMatchingEndTag( start, tagName ); if ( end == (size_t)-1 ) tagSection = psString(""); else { psXMLTag startTag; GetTag(start, startTag); start+=(int)startTag.Length(); GetSubString(tagSection, start, end); } return tagSection.Length(); }
int Sentence::Read(std::istream& in,const std::vector<FactorType>& factorOrder) { // const std::string& factorDelimiter = StaticData::Instance().GetFactorDelimiter(); std::string line; std::map<std::string, std::string> meta; if (getline(in, line, '\n').eof()) return 0; //get covered words - if continual-partial-translation is switched on, parse input const StaticData &staticData = StaticData::Instance(); m_frontSpanCoveredLength = 0; m_sourceCompleted.resize(0); if (staticData.ContinuePartialTranslation()) { string initialTargetPhrase; string sourceCompletedStr; int loc1 = line.find( "|||", 0 ); int loc2 = line.find( "|||", loc1 + 3 ); if (loc1 > -1 && loc2 > -1) { initialTargetPhrase = line.substr(0, loc1); sourceCompletedStr = line.substr(loc1 + 3, loc2 - loc1 - 3); line = line.substr(loc2 + 3); sourceCompletedStr = Trim(sourceCompletedStr); initialTargetPhrase = Trim(initialTargetPhrase); m_initialTargetPhrase = initialTargetPhrase; int len = sourceCompletedStr.size(); m_sourceCompleted.resize(len); int contiguous = 1; for (int i = 0; i < len; ++i) { if (sourceCompletedStr.at(i) == '1') { m_sourceCompleted[i] = true; if (contiguous) m_frontSpanCoveredLength ++; } else { m_sourceCompleted[i] = false; contiguous = 0; } } } } // remove extra spaces line = Trim(line); // if sentences is specified as "<seg id=1> ... </seg>", extract id meta = ProcessAndStripSGML(line); if (meta.find("id") != meta.end()) { this->SetTranslationId(atol(meta["id"].c_str())); } if (meta.find("docid") != meta.end()) { this->SetDocumentId(atol(meta["docid"].c_str())); this->SetUseTopicId(false); this->SetUseTopicIdAndProb(false); } if (meta.find("topic") != meta.end()) { vector<string> topic_params; boost::split(topic_params, meta["topic"], boost::is_any_of("\t ")); if (topic_params.size() == 1) { this->SetTopicId(atol(topic_params[0].c_str())); this->SetUseTopicId(true); this->SetUseTopicIdAndProb(false); } else { this->SetTopicIdAndProb(topic_params); this->SetUseTopicId(false); this->SetUseTopicIdAndProb(true); } } if (meta.find("weight-setting") != meta.end()) { this->SetWeightSetting(meta["weight-setting"]); this->SetSpecifiesWeightSetting(true); staticData.SetWeightSetting(meta["weight-setting"]); } else { this->SetSpecifiesWeightSetting(false); } // parse XML markup in translation line //const StaticData &staticData = StaticData::Instance(); std::vector< size_t > xmlWalls; std::vector< std::pair<size_t, std::string> > placeholders; if (staticData.GetXmlInputType() != XmlPassThrough) { int offset = 0; if (staticData.IsChart()) { offset = 1; } if (!ProcessAndStripXMLTags(line, m_xmlOptions, m_reorderingConstraint, xmlWalls, placeholders, offset, staticData.GetXmlBrackets().first, staticData.GetXmlBrackets().second)) { const string msg("Unable to parse XML in line: " + line); TRACE_ERR(msg << endl); throw runtime_error(msg); } } // Phrase::CreateFromString(Input, factorOrder, line, factorDelimiter, NULL); Phrase::CreateFromString(Input, factorOrder, line, NULL); // placeholders ProcessPlaceholders(placeholders); if (staticData.IsChart()) { InitStartEndWord(); } //now that we have final word positions in phrase (from CreateFromString), //we can make input phrase objects to go with our XmlOptions and create TranslationOptions //only fill the vector if we are parsing XML if (staticData.GetXmlInputType() != XmlPassThrough ) { for (size_t i=0; i<GetSize(); i++) { m_xmlCoverageMap.push_back(false); } //iterXMLOpts will be empty for XmlIgnore //look at each column for(std::vector<XmlOption*>::const_iterator iterXmlOpts = m_xmlOptions.begin(); iterXmlOpts != m_xmlOptions.end(); iterXmlOpts++) { const XmlOption *xmlOption = *iterXmlOpts; const WordsRange &range = xmlOption->range; for(size_t j=range.GetStartPos(); j<=range.GetEndPos(); j++) { m_xmlCoverageMap[j]=true; } } } // reordering walls and zones m_reorderingConstraint.InitializeWalls( GetSize() ); // set reordering walls, if "-monotone-at-punction" is set if (staticData.UseReorderingConstraint() && GetSize()>0) { m_reorderingConstraint.SetMonotoneAtPunctuation( GetSubString( WordsRange(0,GetSize()-1 ) ) ); } // set walls obtained from xml for(size_t i=0; i<xmlWalls.size(); i++) if( xmlWalls[i] < GetSize() ) // no buggy walls, please m_reorderingConstraint.SetWall( xmlWalls[i], true ); m_reorderingConstraint.FinalizeWalls(); return 1; }
XBOX::VError SendValueBagResponse (IHTTPResponse& ioResponse, const XBOX::VValueBag& inBag, const XBOX::VString& inBagName) { XBOX::VError error = XBOX::VE_OK; const XBOX::VString stringURL = ioResponse.GetRequest().GetURLQuery(); HTTPRequestMethod method = ioResponse.GetRequest().GetRequestMethod(); XBOX::VString resultString; bool isJSON = true; bool prettyFormatting = false; bool isValidRequest = ((method == HTTP_GET) || (method == HTTP_HEAD)); if (isValidRequest) { sLONG posFormat = 0, posPretty = 0; const UniChar * stringPtr = stringURL.GetCPointer(); const sLONG stringLen = stringURL.GetLength(); if ((posFormat = HTTPServerTools::FindASCIICString (stringPtr, "format=")) > 0) { posFormat += 6; sLONG startPos = 0; sLONG endPos = HTTPServerTools::FindASCIICString (stringPtr + posFormat, "&"); if (endPos <= 0) endPos = stringLen; else endPos += (posFormat - 1); if (((startPos = HTTPServerTools::FindASCIICString (stringPtr + posFormat, "xml")) > 0) && (startPos < endPos)) isJSON = false; else if(((startPos = HTTPServerTools::FindASCIICString (stringPtr + posFormat, "json")) > 0) && (startPos < endPos)) isJSON = true; else isValidRequest = false; } if ((posPretty = HTTPServerTools::FindASCIICString (stringPtr, "pretty=")) > 0) { XBOX::VString prettyString; posPretty += 6; sLONG endPos = HTTPServerTools::FindASCIICString (stringPtr + posPretty, "&"); if (endPos <= 0) endPos = stringLen; else endPos += (posPretty - 1); if (endPos > posPretty) { GetSubString (stringURL, posPretty, endPos - 1, prettyString); prettyFormatting = (HTTPServerTools::EqualASCIICString (prettyString, "yes")); } else isValidRequest = false; } } if (isValidRequest) { if (isJSON) { inBag.GetJSONString (resultString, prettyFormatting ? JSON_PrettyFormatting : JSON_Default); } else { resultString.FromCString ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); inBag.DumpXML (resultString, inBagName, prettyFormatting); } XBOX::StStringConverter<char> buffer (resultString, XBOX::VTC_UTF_8); error = ioResponse.SetResponseBody (buffer.GetCPointer(), buffer.GetLength()); ioResponse.SetExpiresHeader (GMT_NOW); ioResponse.AddResponseHeader (STRING_HEADER_PRAGMA, STRING_HEADER_VALUE_NO_CACHE); ioResponse.AddResponseHeader (STRING_HEADER_CONTENT_TYPE, (isJSON) ? STRING_CONTENT_TYPE_JSON : STRING_CONTENT_TYPE_XML); ioResponse.SetContentLengthHeader (buffer.GetLength()); ioResponse.AllowCompression (true); } else { error = ioResponse.ReplyWithStatusCode (HTTP_BAD_REQUEST); } return error; }
LPCWSTR CUIGlobals::GetUserName(int i) { return GetSubString(m_wszUserNames, i); }
void psXMLTag::GetTagParm(const char* parm, csString& value ) { psString param(" "); param.Append(parm); param.Append('='); int start = FindSubString(param, 0, XML_CASE_INSENSITIVE); //Checks to see if the parm is getting mixed up with the tag name. if ( start==1 ) { psString tagName; GetTagName(tagName); start = FindSubString(param,(int)tagName.Length(),XML_CASE_INSENSITIVE); } psString tempStr; value=""; const char *myData = GetData(); while ( start != -1 ) { start += (int)param.Length(); if (start >= (int)Length()) return; // skip whitespace after parm name while (myData[start]==' ') { start++; if (start >= (int)Length()) return; } size_t end = start+1; // parm is at least one char // Determine delimiter, if any char chr; if ( myData[start] == '\"') chr = '\"'; else if ( myData[start] == '[') chr = ']'; else if ( myData[start] == '\'') chr = '\''; else chr = ' '; while ( end < Length() && myData[end]!=chr && myData[end] != '>') end++; GetSubString(tempStr, start+(chr!=' '), end); // Replace any xml code with the correct '&' const char* what = "&"; const char* with = "&"; while (tempStr.FindSubString(what) != -1) tempStr.ReplaceSubString(what,with); what = "'"; with = "'"; while (tempStr.FindSubString(what) != -1) tempStr.ReplaceSubString(what,with); value = tempStr; return; } }
int main() { char strSource[]="ads3sl456789DF3456ld345AA", char strResult[sizeof(strSource)]; printf("Len=%d, strResult=%s \nstrSource=%s\n", GetSubString(strSource, strResult), strResult, strSource); return 0; }