/*============================================================================= *NAME :main : *MODULE :Test.cpp : *FUNCTION :メイン処理関数です : *PROGRAMMED :Y.Sasai *HISTORY : *ID -- DATE ------- NOTE ------------------------------------------------------ *00 03.02.13 Y.Sasai Ver.0.00 初期作成 */ int main( int argc, char* argv[] ) { TStringList slist; // 2003.02.13 Y.Sasai Ver.0.00 StringList.cpp読み込み用 TStringList ysini; // 2003.02.13 Y.Sasai Ver.0.00 YSIniFiles.cpp読み込み用 TYSIniFile ifile( "test.ini" ); // 2003.02.13 Y.Sasai Ver.0.00 Iniファイルクラス slist.LoadFromFile( "q:\\VCTest\\StringList.cpp" ); // 2003.02.13 Y.Sasai Ver.0.00 読み込み ysini.LoadFromFile( "q:\\VCTest\\YSIniFiles.cpp" ); // 2003.02.13 Y.Sasai Ver.0.00 読み込み ifile.WriteStringList( "StringList.cpp", "Source", slist ); // 2003.02.13 Y.Sasai Ver.0.00 書き込みだ ifile.WriteStringList( "YSIniFiles.cpp", "Source", ysini ); // 2003.02.13 Y.Sasai Ver.0.00 書き込みだ ifile.UpdateFile(); return 0; }
void __fastcall TfrmMain::LoadTimer(TObject *Sender) { LoadSetting(); if (FileExists(String(LoginerPath) +"\\Data\\"+ GameAccount + "\\Items.dat")) { TStringList *list = new TStringList(); list->LoadFromFile(String(LoginerPath) +"\\Data\\"+ GameAccount + "\\Items.dat"); for (int i = 0; i < list->Count; i++) { unsigned int ItemID; ItemID = _wtoi(list->Strings[i].w_str()); AnsiString name = String(GetItemName(ItemID)); if (name.IsEmpty()) { name.sprintf(TEXT("未知物品(編號:%d)"), ItemID); } int index = list_drop->Items->IndexOfObject((TObject *)ItemID); if (index > -1) list_drop->Items->Delete(index); index = list_filter->Items->IndexOfObject((TObject *)ItemID); if (index < 0) list_filter->Items->AddObject(name, (TObject *)ItemID); } delete list; } Load->Enabled = false; }
//--------------------------------------------------------------------------- static TStringList * TVPGetConfigFileOptions(AnsiString filename) { // load .cf file AnsiString errmsg; if(!FileExists(filename)) errmsg = "file not found."; TStringList * ret = new TStringList(); if(errmsg == "") { try { ret->LoadFromFile(filename); } catch(Exception & e) { errmsg = e.Message; } catch(...) { delete ret; throw; } } if(errmsg != "") TVPAddImportantLog(ttstr("(info) Loading configuration file \"") + filename.c_str() + "\" failed (ignoring) : " + errmsg.c_str()); else TVPAddImportantLog(ttstr("(info) Loading configuration file \"") + filename.c_str() + "\" succeeded."); return ret; }
/*============================================================================= *NAME :TYSIniFile::Read : *MODULE :YSIniFiles.cpp : *FUNCTION :読み込み処理関数です : *PROCESS :・Iniファイル読み込みです。 : *RETURN : true = 正常終了 :false = エラー終了 : *PROGRAMMED :Y.Sasai *HISTORY : *ID -- DATE ------- NOTE ------------------------------------------------------ *00 03.02.10 Y.Sasai Ver.0.90 初期作成 */ bool TYSIniFile::Read( void ) { TStringList slist; // 2003.02.10 Y.Sasai Ver.0.90 文字列リスト int tempi; TYSIniSection* ysection; // 2003.02.10 Y.Sasai Ver.0.90 セクションクラス CString sitem; if ( FileName == "" ) { // 2003.02.10 Y.Sasai Ver.0.90 ファイル名未設定なら… return ( false ); // 2003.02.10 Y.Sasai Ver.0.90 おわる } else if ( FileExists( FileName ) == false ) { // 2003.02.10 Y.Sasai Ver.0.90 そのファイルがなかったら… return ( false ); // 2003.02.10 Y.Sasai Ver.0.90 おわりだ } ysection = NULL; // 2003.02.10 Y.Sasai Ver.0.90 セクションクラス初期化だ if ( slist.LoadFromFile( FileName ) == false ) { // 2003.02.10 Y.Sasai Ver.0.90 ファイル読み込みエラーなら… return ( false ); // 2003.02.10 Y.Sasai Ver.0.90 エラーだ } for ( tempi = 0; tempi < slist.Count; tempi++ ) { sitem = slist[tempi]; if ( sitem == "" ) { // 2003.02.10 Y.Sasai Ver.0.90 空行なら… continue; // 2003.02.10 Y.Sasai Ver.0.90 つぎだ } if ( SectionCheck( sitem ) == true ) { // 2003.02.10 Y.Sasai Ver.0.90 セクション名なら… ysection = Add(); // 2003.02.10 Y.Sasai Ver.0.90 セクション追加 ysection->Name = SectionNameGet( sitem ); // 2003.02.10 Y.Sasai Ver.0.90 セクション名設定 } else if ( ysection != NULL ) { // 2003.02.10 Y.Sasai Ver.0.90 セクション設定されているなら… ysection->Add( sitem ); // 2003.02.10 Y.Sasai Ver.0.90 セクションに追加 } } return ( true ); // 2003.02.10 Y.Sasai Ver.0.90 まあいいでしょ }
void __fastcall TForm1::FileOpen1Accept(TObject *Sender) { String a = FileOpen1->Dialog->FileName; if (a!=""){ // Öffnen if (ExtractFileExt(a).UpperCase()!=".AD")a=a.SubString(1,a.Length()-ExtractFileExt(a).Length())+".ad"; TStringList *Liste = new TStringList(); Liste->LoadFromFile(a); Max = StrToInt(Liste->Strings[0]); Edit1->Text=Liste->Strings[1]; ListBox1->Clear(); Liste->Delete(0); Liste->Delete(0); for (int i=0;i<Max;i++){ ListBox1->Items->Add(Liste->Strings[i*67]); for (int b=0;b<66;b++){ Data[i][b] = StrToInt(Liste->Strings[i*67 + b + 1]); } } ListBox1->ItemIndex=0; Selected = ListBox1->ItemIndex; Load_Dat(Selected); } }
//--------------------------------------------------------------------------- void TRsyncConfigAdapter::ReadConfig(){ if(!FileExists(CONFIG_FILE)){ ShowMessage("Config " CONFIG_FILE " file not found"); return; } TStringList* lines = new TStringList(); lines->LoadFromFile(CONFIG_FILE); TModuleHolder* currentModule = new TModuleHolder(); currentModule->moduleName = GLOBAL_MODULE; modules->Add(currentModule); for(int i = 0; i < lines->Count; i++){ AnsiString moduleName = FetchModuleLine(lines->Strings[i]); if(moduleName.Length() > 0){ currentModule = new TModuleHolder(); modules->Add(currentModule); currentModule->moduleName = moduleName; continue; } currentModule->nvp->Add(lines->Strings[i]); } delete lines; }
void __fastcall TfMain::FormShow(TObject *Sender) { TStringList* sl = new(TStringList); sl->NameValueSeparator = '='; TFile f; if(f.Exists(ExtractFileDir(Application->ExeName) + "\\Library.lb")){ sl->LoadFromFile(GetCurrentDir() + "\\Library.lb"); for(int i = 0; i < sl->Count; i++){ TListItem* Item = lvLib->Items->Add(); Item->Caption = ExtractFileName(sl->Names[i]); Item->GroupID = 0; Item->SubItems->Add(sl->Names[i]); //path [0] TStringList* ss = new(TStringList); ss->NameValueSeparator = '/'; ss->Add(sl->ValueFromIndex[i]); Item->SubItems->Add(ss->Names[0]); //bookmark [1] Item->SubItems->Add(ss->ValueFromIndex[0]); //size [2] ss->~TStringList(); } } sl->Clear(); if(f.Exists(ExtractFileDir(Application->ExeName) + "\\Settings.ini")){ sl->LoadFromFile(GetCurrentDir() + "\\Settings.ini"); leLogin->Text = sl->ValueFromIndex[0]; lePass->Text = sl->ValueFromIndex[1]; if(sl->ValueFromIndex[2] == "1") cbRememberPass->Checked = true; else cbRememberPass->Checked = false; leServer->Text = sl->ValueFromIndex[3]; } sl->~TStringList(); }
void HTMLDocument::OpenFile(const String &filename) { TStringList *sl = new TStringList; FileName = filename; sl->LoadFromFile(filename); browser->OpenFile(filename); rcedit->Lines->Clear(); html = sl->Text; rcedit->Text = html; setchanged(false); delete sl; }
void __fastcall TForm1::FormCreate(TObject *Sender) { AnsiString ip; AnsiString hostname; int ok; int time; TPing pi; int aa=50; grLista= new TList; int pos; h= new THostList(); TStringList *TempList = new TStringList; TempList->LoadFromFile("pingowaniet.txt"); for (int i = 0; i < TempList->Count; i++) { hostname=""; pos=TempList->Strings[i].AnsiPos(";"); if(pos>0) { ip=TempList->Strings[i].SubString(0,pos-1); hostname=TempList->Strings[i].SubString(pos+1,TempList->Strings[i].Length()-pos); } else ip=TempList->Strings[i]; h->AddHost(ip,hostname); // kreowanie wykresu gr1=Creategraph(aa); grLista->Add(gr1); this->InsertControl(gr1); aa=aa+127; }; delete TempList; incre=0; pi.Create(); for (int i = 0; i < h->Count(); i++) { ip=h->GetHost(i); pi.Ping(ip,ok,time); gr1=(TPerformanceGraph *)grLista->Items[i]; if(ok==0) { time=9999; gr1->DataPoint(clRed,150); } else gr1->DataPoint(clLime,time); gr1->Update(); h->AddHostPingTime(i,time); }; if(h->AnyOutTime()) TrayIcon1->IconIndex=1; else TrayIcon1->IconIndex=0; }
TFastIni::TFastIni(AnsiString FN) : m_LastSectionIndex(-1) { m_Sections = new TList(); TStringList *SL = new TStringList(); if (FileExists(FN)){ SL->LoadFromFile(FN); } LoadFromString(SL); delete SL; }
void ShowAboutDemoForm() { if (FForm == NULL){ FForm = new TformAboutDemo(Application); TStringList *ADescription = new TStringList(); try{ ADescription->LoadFromFile(ExtractFilePath(Application->ExeName) + "About.txt"); FForm->Show(); FForm->redDescription->Lines->Text = ADescription->Text; } __finally{ delete ADescription; } }
//--------------------------------------------------------------------------- __fastcall TEnumWinForm::TEnumWinForm(TComponent* Owner) : TForm(Owner) { TStringList *list = new TStringList(); list->LoadFromFile("winmsgs.txt"); AnsiString str; int k; for(int i = 0; i < list->Count; i++) { str.SetLength(100); sscanf(list->Strings[i].c_str(),"%s %X\n",str.c_str(),&k); MsgComboBox->Items->AddObject(str,(TObject *)k); } delete list; MsgComboBox->ItemIndex = 0; }
void __fastcall TfmLauncher::ProcessConfigFile() { if (FileExists(ConfigFileName)){ TStringList *ConfigFile = new TStringList(); __try{ ConfigFile->LoadFromFile(ConfigFileName); RootDirectory = ConfigFile->Values[cRootDirectory]; FileName = ConfigFile->Values[cFileName]; FileName = RemoveTrailingSlash(RootDirectory) + '\\' + RemoveLeadingSlash(FileName); } __finally{ delete ConfigFile; } } }
void ScanAndPrint(seakgOutput *pOutput, UnicodeString fullname) { TStringList *list = new TStringList(); list->LoadFromFile(fullname); int nCount = list->Count; for (int i = 0; i < nCount; i++) { UnicodeString str = list->Strings[i]; if (str.Pos(L"class") > 0 && str.Pos("__declspec") > 0) { UnicodeString code = str + "\r\n"; str = str.Trim(); UnicodeString uuid = "none"; if (str.Pos("\"") > 0) uuid = str.SubString(str.Pos("\"") + 1, 36); UnicodeString interfacename = str.SubString(str.Pos("I"), str.Length() - str.Pos("I") + 1); UnicodeString interfacename2 = getName(str); bool bStop = false; int nIncr = 0; while (bStop == false && i < nCount) { i++; str = list->Strings[i]; if (str.Pos("{") > 0) { nIncr++; }; if (str.Pos("}") > 0) { nIncr--; if(nIncr == 0) bStop = true; }; code += str + "\n"; }; PrintDoc(pOutput, fullname, interfacename2, uuid, code); // std::wcout << str.c_str(); }; }; /*std::wcout << "createuuidprojectname: " << << "\r\n"; std::wcout << "projectname: " << projectName.c_str() << "\r\n"; std::wcout << "fullname: " << fullname.c_str() << "\r\n";*/ };
String GetServerIP() { TStringList *list = new TStringList; if (FileExists(ExtractFilePath(Application->ExeName) + "\\ip.txt")) { try { list->LoadFromFile(ExtractFilePath(Application->ExeName) + "\\ip.txt"); return list->Strings[0]; } catch (...) { ShowMessage("Ошибка! Не верный ip-адрес сервера."); delete list; return "localhost"; } } else return "localhost"; }
int _tmain(int argc, _TCHAR* argv[]) { if( argc == 2 || argc == 3) { UnicodeString filename(argv[1]); TStringList *list = new TStringList(); list->LoadFromFile(filename); g_pCore = new brainfuck::core(); if(argc == 3) { UnicodeString debug(argv[2]); if(debug == "debug") g_pCore->Debug = true; else g_pCore->Debug = false; } CharReader *pReader = new CharReader(); pReader->setString( list->Text ); CharParser *pParserLayerFirst = new CharParser(pReader); init_layer_first( pParserLayerFirst ); while( ! pParserLayerFirst->Eof() ) { wchar_t chResult; int err; if( pParserLayerFirst->GetNextElement( chResult, err ) ) { if(chResult != 0) std::wcout << chResult; } else { std::cout << "\r\n[err=" << (int)err << "]\n"; break; }; }; } else { wcout << "Useage: brainfuck <filename> - for release\r\nor brainfuck <filename> debug - for debug\r\n"; }; return 0; }
void __fastcall TMainForm::N6Click(TObject *Sender) { TStringList *opentable = new TStringList; String buftable2; if (Open->Execute()) { opentable->LoadFromFile(Open->FileName); Grid1->RowCount = opentable->Count; Console->Lines->Add("Открыт файл " + Open->FileName); for (int i = 0; i < Grid1->RowCount; i++) { Grid1->Rows[i]->DelimitedText = opentable->Strings[i]; } delete opentable; Series1->Clear(); chart *Thr = new chart(false); Console->Lines->Add("График построен из файла " + Open->FileName); } }
void ReceiveServerMatrix(void *Sender) { String FileName = "ExpMtr\\mtr.xml"; TStringList *list = new TStringList; TSendThread *Client; int mr; String err, s; char c[512]; Client = new TSendThread(true); if (LoginForm->ShowModal() != mrOk) return; Client->User = LoginForm->UserEdit->Text; Client->Password = LoginForm->PasswordEdit->Text; Client->ms = new TMemoryStream; s = "SchoolCode=" + Client->User.SubString(3, 6); Client->ms->Write(s.c_str(), 512); // Client->ms->Write('\0', 1); // Client->ms->Position = 0; // Client->ms->Read(c, 512); Client->CommandID = "4"; if (FileExists(ExtractFilePath(Application->ExeName) + "\\ip.txt")) { try { list->LoadFromFile(ExtractFilePath(Application->ExeName) + "\\ip.txt"); Client->srv = list->Strings[0]; } catch (...) { ShowMessage("Ошибка! Не верный ip-адрес сервера."); return; } } else Client->srv = "localhost"; delete list; Client->FreeOnTerminate = true; SendForm->Show(); SendForm->Memo1->Lines->Append("Соединение с сервером."); Client->Resume(); }
/*============================================================================= *NAME :main : *MODULE :Test.cpp : *FUNCTION :メイン処理関数です : *PROGRAMMED :Y.Sasai *HISTORY : *ID -- DATE ------- NOTE ------------------------------------------------------ *00 03.02.13 Y.Sasai Ver.0.00 初期作成 */ int main( int argc, char* argv[] ) { TStringList slist; // 2003.02.13 Y.Sasai Ver.0.00 文字列リストクラス作成 TStringList dlist; // 2003.02.13 Y.Sasai Ver.0.00 もひとつ作成 int tempi; slist.LoadFromFile( "q:\\VCTest\\ReadMe.txt" ); // 2003.02.13 Y.Sasai Ver.0.00 読み込み printf( "行数:%d\n", slist.Count ); // 2003.02.13 Y.Sasai Ver.0.00 行数表示 if ( slist.Count >= 12 ) { puts( slist[11] ); } if ( slist.Count >= 21 ) { puts( slist[20] ); } dlist.Text = slist.Text; // 2003.02.13 Y.Sasai Ver.0.00 文字列全体をコピー for ( tempi = 0; tempi < dlist.Count; tempi++ ) { puts( dlist[tempi] ); // 2003.02.13 Y.Sasai Ver.0.00 全行表示 } return 0; }
void HellPalette::Load(AnsiString NomeFile) { if(FileExists(NomeFile)) { if(ExtractFileExt(NomeFile)==".pal") { TStringList *TextFile = new TStringList; TextFile->LoadFromFile(NomeFile); for(int t=0;t<256;t++) { int red,green,blue; sscanf(TextFile->Strings[t].c_str(),"%d %d %d",&red,&green,&blue); Colore[t] = (TColor) (blue*0x010000 + green*0x000100 + red*0x000001); } delete TextFile; } else if(ExtractFileExt(NomeFile)==".act") { int fh = FileOpen(NomeFile,fmOpenRead); unsigned char *buf = new unsigned char[768]; FileRead(fh,buf,768); FileClose(fh); for(int t=0;t<256;t++) { int red,green,blue; red = buf[t*3+0]; green = buf[t*3+1]; blue = buf[t*3+2]; Colore[255-t] = (TColor) (blue*0x010000 + green*0x000100 + red*0x000001); } delete [] buf; } } else { MakeSeedPalette(1); } }
//--------------------------------------------------------------------------- void __fastcall TMainForm::SpeedButtonTxtLoadClick(TObject *Sender){ if (ComboBoxTxtTerminal->Text =="") { ShowMessage("请先选好出票终端,请确认文件游戏玩法数据此终端可以出票。"); return; } //打开彩票号码的文本文件,简单的校验一下,导入表格中 if (OpenDialogTxt->Execute()){ TStringList *lines =new TStringList(); lines->LoadFromFile(OpenDialogTxt->FileName); if (lines->Count >=999) { ShowMessage("每次文本出票张数不能超过1000张,请分次导入出票!"); delete lines; return; } for (int i =0, lineIdx=1; i <lines->Count; i++) { AnsiString line =lines->operator [](i); if (line[1] =='#') continue; //忽略注释行 char *lineChars =line.c_str(); char *delim ="\t"; char *item; int itemIndex =1; item =strtok(lineChars, delim); StringGridTxt->Cells[itemIndex++][lineIdx] =item; while(item =strtok(NULL, delim)){ StringGridTxt->Cells[itemIndex++][lineIdx] =item; if (itemIndex >7) break; } lineIdx ++; } if (lines->Count >0) { ComboBoxTxtTerminal->Enabled =false; SpeedButtonTxtPrint->Enabled =true; } delete lines; } }
//--------------------------------------------------------------------------- void TfrmMainFormServer::FillModuleValues(){ if(lstModules->ItemIndex < 1){ txtPath->Text = ""; txtComment->Text = ""; chkReadonly->Checked = false; txtPath->Enabled = false; txtComment->Enabled = false; lblPath->Enabled = false; lblComment->Enabled = false; btnBrowse->Enabled = false; chkReadonly->Enabled = false; chkUseAuth->Checked = false; chkUseAuth->Enabled = false; txtUID->Enabled = false; lblUID->Enabled = false; lblTIP->Enabled = false; txtPWD->Enabled = false; lblPWD->Enabled = false; return; } txtPath->Enabled = true; txtComment->Enabled = true; lblPath->Enabled = true; lblComment->Enabled = true; btnBrowse->Enabled = true; chkReadonly->Enabled = true; chkUseAuth->Enabled = true; AnsiString selectedModule = lstModules->Items->Strings[lstModules->ItemIndex]; txtPath->Text = GenericUtils::ConvertPathCygwinToWindows(adapter.GetParamValue(selectedModule, "path")); txtComment->Text = adapter.GetParamValue(selectedModule, "comment"); txtUID->Text = adapter.GetParamValue(selectedModule, "auth users"); txtPWD->Text = ""; if(txtUID->Text.Trim().Length() > 0){ //The value for secrets file is actually a file, not the password. Therefore, I have to read the //value from that file. AnsiString secretFile = adapter.GetParamValue(selectedModule, "secrets file"); if(secretFile.Trim().Length() == 0){ txtPWD->Text = ""; }else{ txtPWD->Text = ""; //Assume there was an error reading the password. secretFile = GenericUtils::ConvertPathCygwinToWindows(secretFile); if(FileExists(secretFile)){ TStringList* sList = new TStringList(); sList->LoadFromFile(secretFile); for(int i = 0; i < sList->Count; i++){ AnsiString userName = txtUID->Text + ":"; if(sList->Strings[i].Trim().Pos(userName) == 1){ //Found the appropriate user name. txtPWD->Text = sList->Strings[i].Trim().SubString(userName.Length() + 1, 100); } } delete sList; } } chkUseAuth->Checked = true; txtUID->Enabled = true; lblUID->Enabled = true; lblTIP->Enabled = true; txtPWD->Enabled = true; lblPWD->Enabled = true; }else{ //If User Name is blank, I assume no authentication is used. chkUseAuth->Checked = false; txtUID->Enabled = false; lblUID->Enabled = false; lblTIP->Enabled = false; txtPWD->Enabled = false; lblPWD->Enabled = false; } chkReadonly->Checked = adapter.GetParamValue(selectedModule, "read only").LowerCase() == "true"; txtComment->Modified = false; }
//--------------------------------------------------------------------------- void __fastcall TMainForm::ParseJSON (const UnicodeString& fileName) { TStringList *jsonText = new TStringList; jsonText->LoadFromFile(fileName); TBytes jsonBytes = TEncoding::UTF8->GetBytes(jsonText->Text); delete jsonText; TJSONObject *json = new TJSONObject; json->Parse(jsonBytes, 0); TJSONObject *topObjectValueObj; // Points topObjectValueObj = parseJsonValue(json->Get("points")->JsonValue); for (int i = 0; i < topObjectValueObj->Size(); ++i) { TJSONPair *pair = topObjectValueObj->Get(i); TJSONArray *array = jsonArrayFromPair(pair); // Vertice *point = new Vertice(INTVALARR(array, 0), // INTVALARR(array, 1), // INTVALARR(array, 2)); // // points[pair->JsonString->Value()] = point; } delete topObjectValueObj; // Edges topObjectValueObj = parseJsonValue(json->Get("edges")->JsonValue); map<UnicodeString, TColor> *colors = new map<UnicodeString, TColor>; (*colors)["red"] = clRed; (*colors)["black"] = clBlack; (*colors)["green"] = clGreen; (*colors)["blue"] = clBlue; (*colors)["fuchsia"] = clFuchsia; (*colors)["lime"] = clLime; for (int i = 0; i < topObjectValueObj->Size(); ++i) { TJSONPair *pair = topObjectValueObj->Get(i); TJSONObject *object = parseJsonValue(pair->JsonValue); TJSONArray *array = jsonArrayFromPair(object->Get("vertices")); // Edge *edge = new Edge (points[STRVALARR(array, 0)], points[STRVALARR(array, 1)]); // // if (object->Get("color")) { // edge->setPen((*colors)[STRVALOBJ(object, "color")], 1, psSolid); // } // // edges[pair->JsonString->Value()] = edge; } delete colors; delete topObjectValueObj; // Objects topObjectValueObj = parseJsonValue(json->Get("objects")->JsonValue); for (int i = 0; i < topObjectValueObj->Size(); ++i) { TJSONPair *pair = topObjectValueObj->Get(i); TJSONObject *object = parseJsonValue(pair->JsonValue); TJSONArray *array = jsonArrayFromPair(object->Get("edges")); GraphicObject *graphicObject = new GraphicObject; for (int j = 0; j < array->Size(); ++j) { graphicObject->addEdge(edges[STRVALARR(array, j)]); } objects[pair->JsonString->Value()] = graphicObject; } delete topObjectValueObj; }
//--------------------------------------------------------------------------- bool __fastcall TMetroParams::LoadIniFile(AnsiString file) { TStringList *list = new TStringList(); try { list->LoadFromFile(file); int i; bool run = false; AnsiString name, value; for(i = 0; i < list->Count; i++) { if(!run) { if(list->Strings[i] == "[лерпн]") run = true; continue; } if(list->Strings[i].IsEmpty()) continue; name = list->Strings[i].GetName(); if(*((unsigned short *) name.c_str()) == 0x2f2f) continue; value = list->Strings[i].GetValue(); if(name == "пюдхся_ярюмжхх") { FStationRadius = value.ToIntDef(_DEFAULT_STATION_RADIUS_); continue; } if(name == "нрярсо_нр_ярюмжхх") { FStationShift = value.ToIntDef(_DEFAULT_STATION_SHIFT_); continue; } if(name == "онке_ярхпюмхъ_ярюмжхх") { FStationBlank = value.ToIntDef(_DEFAULT_STATION_BLANK_); continue; } if(name == "рнкыхмю_кхмхх") { FLineWidth = value.ToIntDef(_DEFAULT_LINE_WIDTH_); continue; } if(name == "рнкыхмю_оепеундю") { FPassageWidth = value.ToIntDef(_DEFAULT_PASSAGE_WIDTH_); continue; } if(name == "нпхемрюжхъ_кхмхи") { if(value == "цнпхгнрюкэмюъ") { FLineOrient = loHorz; continue; } if(value == "бепрхйюкэмюъ") FLineOrient = loVert; continue; } if(name == "мюйкнм_кхмхи") { if(value == "дхюцнмюкэмши") { FLineAngle = laDiagonal; continue; } if(value == "нпрнцнмюкэмши") { FLineAngle = laOrthogonal; continue; } if(value == "кчани") FLineAngle = laAny; continue; } if(name == "рхо_янгдюмхъ_яуелш") { if(value == "мнплюкэмши") { FChartMakingType = mtStandard; continue; } if(value == "ярюпши") { FChartMakingType = mtOld; continue; } if(value == "ярюпеиьхи") FChartMakingType = mtOldest; } } delete list; } catch(...) { delete list; return false; } return true; }
//--------------------------------------------------------------------------- bool __fastcall TThreadSubmitToDB::SubmitToOracle() { SECURITY_ATTRIBUTES se = {0}; se.nLength = sizeof(se); se.bInheritHandle = true; se.lpSecurityDescriptor = NULL; CreatePipe(&hReadPipe,&hWritePipe,&se,0); STARTUPINFO si = {0}; si.cb = sizeof(si); si.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES; si.wShowWindow = SW_HIDE; si.hStdOutput = hWritePipe; si.hStdError = hWritePipe; memset(&pi,sizeof(pi),0); if(CreateProcess(NULL,(ToolPath + " " + DBUserName + "/" + DBPassword + "@" + DBServer + " control=\"" + TempFileName + "\" errors=" + MaxError).c_str(),&se,&se,true,NORMAL_PRIORITY_CLASS,NULL,WorkDir.c_str(),&si,&pi)) { bool bContinue = CloseHandle(hWritePipe); hWritePipe = NULL; char chBuffer[2049]; unsigned long Bytesread; AnsiString Text; int pos = 0; while(bContinue) { bContinue = ReadFile(hReadPipe,&chBuffer[0],2048,&Bytesread,NULL); try { chBuffer[Bytesread] = 0; if(strlen(&chBuffer[0]) > 0) { Text = chBuffer; } //Text = AnsiReplaceStr(AnsiReplaceStr(Text,"\r",""),"\n",""); if(Text != "") { if(MessageTextList->Count > MaxMessageLine) MessageTextList->Clear(); if(SlentMode) { printf("%s\n",Text); } MessageTextList->Add(Text); } pos = GetRowsForSQLLDR(Text); if(pos > -1) { SendMessage(hWnd,MSG_SET_PROCESS_POS,pos,0); } } catch(...) { } } WaitForSingleObject(pi.hProcess,INFINITE); CloseHandle(pi.hProcess); pi.hProcess = NULL; CloseHandle(pi.hThread); CloseHandle(hReadPipe); hReadPipe = NULL; if(MessageTextList->Text.Pos("SQL*Loader-") > 0) { ErrorMessage = "提交数据失败,请查看状态窗口中的出错信息."; return false; } else { int n; AnsiString str;// = "逻辑记录计数"; /*for(n = MessageTextList->Count - 1;n > -1;n--) { Text = MessageTextList->Strings[n]; pos = Text.Pos(str); if(pos > 0) { pos = StrToIntEx(Text.SubString(pos + str.Length(),Text.Length() - str.Length() + 1).c_str()); SendMessage(hWnd,MSG_SET_PROCESS_POS,pos,0); if(pos != TotalRecordCount) { ErrorMessage = "提交的数据行数与转换的行数不一致.转换的数据行数为:" + IntToStr(TotalRecordCount) + ",实际提交的行数为:" + IntToStr(pos) + "."; } break; } } if(n == -1) { ErrorMessage = "找不到SQLLDR关键字.导入失败."; }*/ //分析日志文件 TStringList * LogFile = new TStringList; LogFile->LoadFromFile(ExtractFilePath(Application->ExeName) + DestTableName + ".log"); //if(LogFile->Pos(" str = "成功"; for(n = LogFile->Count - 1;n > -1;n--) { Text = LogFile->Strings[n]; int pos1 = Text.Pos(str); if(pos1 > 0) { pos1 = StrToIntEx(Text.c_str());//Text.SubString(pos1 + str.Length(),Text.Length() - str.Length() + 1).c_str()); if(TotalRecordCount - pos1 > StrToInt(MaxError)) { ErrorMessage = "共有" + IntToStr(TotalRecordCount) + "行需要导入,但实际上只载入了" + IntToStr(pos1) + "行."; } break; } } if(n == -1) { ErrorMessage = "找不到SQLLDR关键字,无法分析日志."; } delete LogFile; //如果导入成功,则继续执行SQL语句 if(ErrorMessage == "" && SQLCommandList != NULL) { for(int n = 0;n < SQLCommandList->Count;n++) { try { if(SlentMode) { printf("正在执行语句:%s\n",SQLCommandList->Strings[n]); } MessageTextList->Add("正在执行语句:" + SQLCommandList->Strings[n]); ADOConnection->Execute(SQLCommandList->Strings[n]); } catch(...){} } } //MessageTextList->Clear(); try { for(int n = 0;n < 10;n++) { try { MessageTextList->LoadFromFile(ExtractFilePath(Application->ExeName) + DestTableName + ".log"); break; } catch(...) { } } MessageTextList->Insert(0,"*********************************数据提交报告*********************************"); MessageTextList->Insert(1,"完成时间:" + FormatDateTime("yyyy-mm-dd hh:nn:ss",Now()) + "."); MessageTextList->Insert(2,"目标表:" + DestTableName); MessageTextList->Insert(3,"临时文件:" + TempFileName); MessageTextList->Insert(4,"共转换了" + IntToStr(TotalRecordCount) + "条记录,导入了" + IntToStr(pos) + "条记录."); MessageTextList->Insert(5,"以下是Oracle 的 SQLLDR 生成的报告:"); } catch(...) { } return true; } } else { CloseHandle(hWritePipe); CloseHandle(hReadPipe); ErrorMessage = "创建SQLLDR进程失败.请检查是否安装了Oracle客户端软件和ibill.ini中[ExternalTools]的sqlldrpath是否配置正确."; return false; } }
//执行任务 bool __fastcall BeginJob( int JobMode, //工作模式.1:本地文件模式;2:FTP文件模式 AnsiString ListFileName, //列表文件名 AnsiString BillName, //话单类型名称 AnsiString DBName, //数据库连接名 AnsiString TableName, //表名 AnsiString LogFileName, //日志文件名 AnsiString TempPath, //临时目录 bool TransFieldValue, //是否对字段值进行翻译 int MaxError, //导入时允许的最大错误数 bool VerifyFile, //是否对文件进行格式检查 AnsiString FTPServer, //已配置好的FTP服务器名称,FTP文件模式 AnsiString DirList, //取文件的目录列表 int FTPRetryCount //列FTP文件时允许的最大重试次数 ) { SaveLog(("开始运行任务."\ "\n话单类型:" + BillName + "\n数据库连接:" + DBName + "\n导入到表:" + TableName + "\n日志文件:" + LogFileName + "\n导入数据库允许的最大错误数:" + IntToStr(MaxError) + "\n" "\n临时文件放置在:" + TempPath + "驱动器\n" ).c_str()); if(JobMode == 1) { SaveLog(("话单文件列表是" + ListFileName + ".\n").c_str()); } else if(JobMode == 2) { SaveLog(("搜索目录列表是" + DirList + "\n" + "FTP服务器:" + FTPServer).c_str()); } bool Result = false; frmMain = NULL; TStringList * FileList = NULL; TIdFTP * IdFTP = NULL; try { frmMain = new TfrmMain(Application); if(TempPath != "") { if(!DirectoryExists(TempPath) && !CreateDir(TempPath)) SaveLog(("指定的临时文件夹无效,已改为使用默认的临时文件夹:" + frmMain->TempDirectory + "\n").c_str()); else { if(TempPath.SubString(TempPath.Length(),1) != "\\") TempPath = TempPath + "\\"; frmMain->TempDirectory = TempPath; } } if(!frmMain->DBConfig->IsDBNameExists(DBName)) throw new Exception("在配置文件中找不到" + DBName + "的配置信息"); frmExportToDB = new TfrmExportToDB(NULL); frmExportToDB->txtDBServer->Text = frmMain->DBConfig->GetDBAttributeValue(DBName,"Server"); if(frmExportToDB->txtDBServer->Text == "") throw new Exception("没有为" + DBName + "配置服务器地址"); frmExportToDB->cbxDBType->ItemIndex = frmExportToDB->cbxDBType->Items->IndexOf( frmMain->DBConfig->GetDBAttributeValue(DBName,"DBType")); if(frmExportToDB->cbxDBType->ItemIndex < 0) { throw new Exception("为" + DBName + "配置的数据库类型不正确"); } FileList = new TStringList; if(JobMode == 1) { FileList->LoadFromFile(ListFileName); for(int n = FileList->Count - 1;n > -1;n--) { if(FileList->Strings[n] == "") FileList->Delete(n); } } else //FTP模式 { if(!frmMain->FTPConfig->IsFTPNameExists(FTPServer)) { throw new Exception("在FTP配置文件中找不到指定的FTP服务器"); } IdFTP = new TIdFTP(NULL); IdFTP->Host = frmMain->FTPConfig->GetFTPAttributeValue(FTPServer,"Server"); try { IdFTP->Port = StrToInt(frmMain->FTPConfig->GetFTPAttributeValue(FTPServer,"Port")); } catch(...) { IdFTP->Port = 21; } IdFTP->Username = frmMain->FTPConfig->GetFTPAttributeValue(FTPServer,"UserName"); IdFTP->Password = frmMain->FTPConfig->GetFTPAttributeValue(FTPServer,"Password",true); IdFTP->Passive = frmMain->FTPConfig->GetFTPAttributeValue(FTPServer,"Mode").UpperCase() == "PASV"; AnsiString FTPString = "ftp://" + frmMain->FTPConfig->EncryFTPString(IdFTP->Username) + ":" + frmMain->FTPConfig->EncryFTPString(IdFTP->Password) + "@" + IdFTP->Host + ":" + IntToStr(IdFTP->Port); AnsiString PasvString; if(IdFTP->Passive) PasvString = "|PASV|"; else PasvString = "||"; int ErrCount = 0; while(true) { AnsiString Status; TStringList * FTPDirList = new TStringList; AnsiString CurFTPPath = ""; AnsiString SearchFileName = ""; try { if(IdFTP->Connected()) IdFTP->Disconnect(); Status = "连接FTP服务器" + IdFTP->Host; SaveLog((Status + "\n").c_str()); IdFTP->Connect(true,FTPTimeout); Status = "获取FTP文件列表"; SaveLog((Status + "\n").c_str()); FTPDirList->Clear(); FTPDirList->LoadFromFile(DirList); AnsiString FileName; for(int n = FTPDirList->Count - 1;n > -1;n--) { if(FTPDirList->Strings[n] == "") FTPDirList->Delete(n); } FileList->Clear(); if(FTPDirList->Count == 0) FTPDirList->Add(""); for(int n = 0;n < FTPDirList->Count;n++) { CurFTPPath = FTPDirList->Strings[n]; if(CurFTPPath == "") { CurFTPPath = "/"; SearchFileName = ""; } else { int pos = StrRScan(CurFTPPath.c_str(),"/",-1); if(pos > -1) { SearchFileName = CurFTPPath.SubString(pos + 2,CurFTPPath.Length() - pos - 1); CurFTPPath = CurFTPPath.SubString(1,pos + 1); } else { SaveLog(("搜索路径[" + CurFTPPath + "]不正确,已跳过该行\n").c_str()); continue; } } Status = "获取文件列表" + CurFTPPath + SearchFileName; try { IdFTP->ChangeDir(CurFTPPath); } catch(Exception * E) { if(E->Message.Pos("No such file or directory.") > 0) { SaveLog(("搜索路径[" + CurFTPPath + "]不正确,服务器上没有找到该目录,已放弃对该目录的搜索\n").c_str()); continue; } else { throw new Exception(E->Message); } } if(SearchFileName != "" && SearchFileName.Pos("*") < 1 && SearchFileName.Pos("?") < 1) { //检查SearchFileName在FTP上是否是目录 IdFTP->List(NULL,"",true); for(int k = 0;k < IdFTP->DirectoryListing->Count;k++) { FileName = IdFTP->DirectoryListing->Items[k]->FileName; if(FileName == "." || FileName == "..") continue; if(FileName.LowerCase() == SearchFileName.LowerCase() && IdFTP->DirectoryListing->Items[k]->ItemType == ditDirectory) //SearchFileName是一个目录 { CurFTPPath = CurFTPPath + FileName + "/"; SearchFileName = ""; IdFTP->ChangeDir(CurFTPPath); break; } } } IdFTP->List(NULL,SearchFileName,true); int FileCount = 0; for(int k = 0;k < IdFTP->DirectoryListing->Count;k++) { FileName = IdFTP->DirectoryListing->Items[k]->FileName; if(FileName == "." || FileName == ".." || IdFTP->DirectoryListing->Items[k]->ItemType == ditDirectory) //目录 continue; FileList->Add(FTPString + CurFTPPath + PasvString + FileName); ++FileCount; } SaveLog((CurFTPPath + SearchFileName + " 找到" + IntToStr(FileCount) + "个文件").c_str()); } delete IdFTP; IdFTP = NULL; delete FTPDirList; FTPDirList = NULL; SaveLog(("共搜索到" + IntToStr(FileList->Count) + "个文件.\n").c_str()); for(int n = 0;n < FileList->Count;n++) { SaveLog(("找到文件:" + GetFullFTPFileName(FileList->Strings[n])).c_str()); } break; } catch(Exception * E) { ++ErrCount; if((FTPRetryCount > 0 && ErrCount > FTPRetryCount) || (FTPRetryCount == 0 && ErrCount > 1000)) { if(FTPDirList != NULL) { delete FTPDirList; FTPDirList = NULL; } ProcessExitCode = 5; throw new Exception(Status + "发生错误:" + E->Message); } else { SaveLog((Status + "发生错误:" + E->Message + " 重试" + IntToStr(ErrCount) + "\n").c_str()); } } } } frmExportToDB->txtDBUserName->Text = frmMain->DBConfig->GetDBAttributeValue(DBName,"UserName"); frmExportToDB->txtDBPassword->Text = frmMain->DBConfig->GetDBAttributeValue(DBName,"Password",true); frmExportToDB->cbxDataBases->Items->Add(frmMain->DBConfig->GetDBAttributeValue(DBName,"DataBase")); frmExportToDB->cbxDataBases->ItemIndex = 0; frmExportToDB->txtDBPort->Text = frmMain->DBConfig->GetDBAttributeValue(DBName,"Port"); frmExportToDB->txtTableName->Text = TableName; frmExportToDB->txtMaxError->Text = IntToStr(MaxError); frmExportToDB->cbxTransFieldValue->Checked = TransFieldValue; if(frmExportToDB->LoadFileList(FileList,BillName)) { if(SlentMode) { if(!frmExportToDB->ManualStartJob()) { if(frmExportToDB->TermByUser) { ProcessExitCode = 98; throw new Exception("任务被用户中止"); } else { throw new Exception("发生错误"); } } } else { frmExportToDB->btnStartClick(NULL); frmExportToDB->ShowModal(); } Result = true; } else { ProcessExitCode = 5; throw new Exception("加载文件列表失败"); } } catch(Exception * E) { ShowErrorMessage(Application->Handle,(E->Message).c_str(),false,99); if(ProcessExitCode == 0) ProcessExitCode = 99; Result = false; } SaveLog("*****************任务结束.*******************"); if(IdFTP != NULL) { delete IdFTP; IdFTP = NULL; } if(FileList != NULL) { delete FileList; FileList = NULL; } if(frmExportToDB != NULL) { delete frmExportToDB; frmExportToDB = NULL; } if(frmMain != NULL) { delete frmMain; frmMain = NULL; } return Result; }