String StrToXmlUtf8Str(String str) { str = AnsiReplaceStr(str, "&", "&"); // Should be the first replacement! (because of the '&'). str = AnsiReplaceStr(str, "\"", """); str = AnsiReplaceStr(str, "'", "'"); str = AnsiReplaceStr(str, "<", "<"); str = AnsiReplaceStr(str, ">", ">"); return AnsiToUtf8(str); }
void TFileVersionInfo::SplitVersionNumber() { String version = Values[fviFileVersion]; if (version.IsEmpty()) return; version = AnsiReplaceStr(version, ",", "."); // Seperator can be ',' or '.'. int pos1 = 1; int pos2 = version.Pos("."); if (!pos2) return; FMajor = version.SubString(pos1, pos2-pos1); version = version.Delete(pos1, (pos2-pos1 +1)); pos2 = version.Pos("."); if (!pos2) return; FMinor = version.SubString(pos1, pos2-pos1); version = version.Delete(pos1, (pos2-pos1 +1)); pos2 = version.Pos("."); if (!pos2) return; FRelease = version.SubString(pos1, pos2-pos1); version = version.Delete(pos1, (pos2-pos1 +1)); FBuild = version; }
String StripNonNumbers(String str) { for (int i=1; i<=str.Length(); i++) { if ((str[i] < '0') || (str[i] > '9')) str[i] = ' '; } return AnsiReplaceStr(str, " ", ""); }
void WriteToLog(String S) { HANDLE LogFile; String LogPath; String LogFileName; DWORD dwSize; AnsiString SS; TDateTime DateTime; LPDWORD NumberOfBytesWritten = new DWORD; try { // except DateTime = Now(); LogPath = ExtractFilePath(Application->ExeName) + LoadStr(IDS_LOG_PATH); if (!DirectoryExists(LogPath)) CreateDir(LogPath); LogFileName = IncludeTrailingPathDelimiter(LogPath) + ChangeFileExt(ExtractFileName(Application->ExeName), LoadStr(IDS_LOG_EXT)); LogFile = CreateFile(LogFileName.w_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); dwSize = 0; if (LogFile != INVALID_HANDLE_VALUE) { dwSize = GetFileSize(LogFile, NULL); CloseHandle(LogFile); } if (dwSize > MaxLogSize) { String NewFileName = IncludeTrailingPathDelimiter(LogPath) + OnlyFileName(Application->ExeName) + SPACE + FormatDateTime (LoadStr(IDS_DATETIME_FORMAT_FILENAME), DateTime) + LoadStr(IDS_LOG_EXT); MoveFile(LogFileName.w_str(), NewFileName.w_str()); } LogFile = CreateFile(LogFileName.w_str(), GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_ATTRIBUTE_COMPRESSED, 0); if (LogFile != INVALID_HANDLE_VALUE) { SS = AnsiString(FormatDateTime(LoadStr(IDS_DATETIME_FORMAT_LOG), DateTime) + "; " + AnsiReplaceStr(S, sLineBreak, SPACE) + sLineBreak); if (SetFilePointer(LogFile, 0, NULL, FILE_END) != INVALID_SET_FILE_POINTER) WriteFile(LogFile, SS.c_str(), SS.Length(), NumberOfBytesWritten, NULL); CloseHandle(LogFile); } } catch (...) { } }
void TfrmResultEnterEdit::storeResult(void){ //-- Зафиксировать результат для участника AnsiString shootRes = frmResultEnterEdit->mskedtCompetitorShootScore->Text.Trim(); if(shootRes=="") shootRes = "-1"; currentCompetitor.result.setShootScore(StrToInt(shootRes)); AnsiString crossTime = AnsiReplaceStr(frmResultEnterEdit->mskedtCompetitorCrossTime->Text, " ", "0"); currentCompetitor.result.setCrossTime(crossTime); currentCompetitor.storeResult(); lblNewShootResult->Visible = false; lblNewCrossResult->Visible = false; }
UnicodeString StringReplace(const UnicodeString & Str, const UnicodeString & From, const UnicodeString & To, const TReplaceFlags & Flags) { return AnsiReplaceStr(Str, From, To); }
//--------------------------------------------------------------------------- AnsiString __fastcall TfrmSearch::AnalyseScript() { AnsiString Script; AnsiString s; for(int n = 0;n < SkyEdit2->Lines->Count;n++) { s = SkyEdit2->Lines->Strings[n]; s = AnsiReplaceStr(AnsiReplaceStr(AnsiReplaceStr(AnsiReplaceStr(s,"\n"," "),"\r"," ")," "," "),"\t"," "); if(s.SubString(1,1) == "'" || s.SubString(1,4).LowerCase() == "rem "||s.SubString(1,4).LowerCase() == "rem\t") //注释行 continue; Script = Script + " " + SkyEdit2->Lines->Strings[n]; } Script = AnsiReplaceStr(AnsiReplaceStr(AnsiReplaceStr(Script,"\n"," "),"\r"," "),"\t"," "); AnsiString LowerCaseScript = Script.LowerCase(); AnsiString ParamString; TBillField * BillField; AnsiString LowerCaseFieldName; AnsiString ParamName; int Pos; for(int n = 0;n < BillFile->FieldCount;n++) { BillField = BillFile->GetBillField(n); LowerCaseFieldName = BillField->FieldName.LowerCase(); Pos = LowerCaseScript.Pos(LowerCaseFieldName); if(Pos < 1) continue; //ParamName = BillField->FieldName.LowerCase(); if(ParamString == "") //ParamString = ParamString + ParamName; ParamString = ParamString + BillField->FieldName; else //ParamString = ParamString + "," + ParamName; ParamString = ParamString + "," + BillField->FieldName; //将原字符串中的字段名替换为ParamName int k = 1; while(k <= LowerCaseScript.Length()) { if(LowerCaseScript.SubString(k,LowerCaseFieldName.Length()) == LowerCaseFieldName) { Script = StuffString(Script,k,LowerCaseFieldName.Length(),BillField->FieldName); LowerCaseScript = StuffString(LowerCaseScript,k,LowerCaseFieldName.Length(),LowerCaseFieldName); } ++k; } MatchFieldList->AddObject(BillField->FieldName,(TObject *)BillField); } ParamString = "(" + ParamString + ")"; Script = "'执行过程\nFunction MatchBill" + ParamString + "\n" + "if " + Script + " then \n"\ " MatchBill = 1\n"\ "else\n MatchBill = 0\n"\ "end if\n"\ "End Function"; SkyEdit1->Text = Script; //脚本语法检查 TScriptControl * ScriptControl = new TScriptControl(this); ScriptControl->Language = "VBScript"; ScriptControl->AllowUI = false; LPSAFEARRAY Params; //传递给脚本的参数 Params = SafeArrayCreateVector(VT_VARIANT, 0, MatchFieldList->Count); VARIANT * pData = NULL; SafeArrayAccessData(Params, (void **)&pData); //锁定数据 TList * ParamList = new TList; //参数列表 VARIANT * pDataTmp; for(int n = 0;n < MatchFieldList->Count;n++) { pDataTmp = new VARIANT; pDataTmp->vt = VT_BSTR; ParamList->Add((TObject *)pDataTmp); } ScriptControl->AddCode(WideString(Script).c_bstr()); bool ScriptSucceed; ScriptControl->Error->get_Number(); ScriptSucceed = ScriptControl->Error->Number == 0; if(!ScriptSucceed)//ScriptControl->Error->Number > 0) { MessageBox(Handle,("查询脚本错误:第 " + AnsiString(ScriptControl->Error->Line) \ + " 行,第 " + AnsiString(ScriptControl->Error->Column) \ + "列出现错误 " + AnsiString(ScriptControl->Error->Number) \ + " (" + AnsiString(ScriptControl->Error->Description) + ")").c_str(),"错误",MB_OK | MB_ICONSTOP); //ScriptSucceed = false; } else { //生成参数列表 for(int p = 0;p < MatchFieldList->Count;p++) { pDataTmp = (VARIANT *)ParamList->Items[p]; switch(((TBillField *)MatchFieldList->Objects[p])->SortType) { case SORT_AS_STR: pDataTmp->bstrVal = SysAllocString(L"000"); break; case SORT_AS_DATETIME: pDataTmp->bstrVal = SysAllocString(L"2000-01-01 00:00:00"); break; case SORT_AS_NUMBER: pDataTmp->bstrVal = SysAllocString(L"1000"); break; case SORT_AS_CURRENCY: pDataTmp->bstrVal = SysAllocString(L"2.18"); break; } * (pData + p) = * pDataTmp; } //执行脚本 try { int Found = ScriptControl->Run(WideString("MatchBill").c_bstr(),&Params); if(Found != 0 && Found != 1) { MessageBox(Handle,"脚本没有返回预期的0或1","脚本编译错误",MB_OK | MB_ICONSTOP); ScriptSucceed = false; } else ScriptSucceed = true; } catch(Exception & E) { ScriptSucceed = false; } if(!ScriptSucceed && ScriptControl->Error->Number != 0) MessageBox(Handle,("查询脚本错误:\n"\ "第 " + AnsiString(ScriptControl->Error->Line) \ + " 行,第 " + AnsiString(ScriptControl->Error->Column) \ + "列出现错误\n " + AnsiString(ScriptControl->Error->Number) \ + " (" + AnsiString(ScriptControl->Error->Description) + ")").c_str(),"脚本编译错误",MB_OK | MB_ICONSTOP); //释放字符串占用的空间 for(int p = 0;p < MatchFieldList->Count;p++) { pDataTmp = (VARIANT *)ParamList->Items[p]; SysFreeString(pDataTmp->bstrVal); } SafeArrayUnaccessData(Params); for(int n = 0;n < ParamList->Count;n++) { delete (VARIANT *)ParamList->Items[n]; } delete ParamList; delete ScriptControl; } if(ScriptSucceed) return Script; else return ""; }
String ReplaceStr(String str, String from_str, String to_str) { return AnsiReplaceStr(str, from_str, to_str); }
String StrToXmlQuotStr(String str) { str = AnsiReplaceStr(str, "\"", """); str = AnsiReplaceStr(str, "'", "'"); return str; }