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);
}
}
Exemple #2
0
void Defines::RemoveFromList(String keyList, String data)
{
        TStringList *s = GetList(keyList);
        if (s==0)
                return;
        int i=s->IndexOf(data);
        if (i>=0)
                s->Delete(i);
        SetList(keyList,s);
        delete s;
}
Exemple #3
0
//---------------------------------------------------------------------------
void __fastcall TLocationProfilesDialog::RemoveBookmark(TObject * Sender)
{
  TBookmarkList * BookmarkList = GetBookmarkList(Sender);
  TTreeView * ProfilesView = GetProfilesView(Sender);
  TStringList * Folders = GetFolders(Sender);

  assert(ProfilesView->Selected);
  TTreeNode * Node = ProfilesView->Selected;
  if (Node->Data)
  {
    BookmarkList->Delete((TBookmark *)Node->Data);
    TTreeNode * ParentNode = Node->Parent;
    Node->Delete();
    if (ParentNode && !ParentNode->Count)
    {
      assert(Folders->IndexOfObject(ParentNode) >= 0);
      Folders->Delete(Folders->IndexOfObject(ParentNode));
      ParentNode->Delete();
    }
  }
  else
  {
    UnicodeString Message = MainInstructions(LoadStr(DELETE_BOOKMARK_FOLDER));
    if (MessageDialog(Message, qtConfirmation,
          qaYes | qaNo, HELP_LOCATION_PROFILE_DELETE) == qaYes)
    {
      assert(Node->Count);
      for (int i = 0; i < Node->Count; i++)
      {
        BookmarkList->Delete((TBookmark *)Node->Item[i]->Data);
      }
      assert(Folders->IndexOfObject(Node) >= 0);
      Folders->Delete(Folders->IndexOfObject(Node));
      Node->Delete();
    }
  }
  UpdateControls();
}
Exemple #4
0
//---------------------------------------------------------------------------
void __fastcall TLocationProfilesDialog::BookmarkMove(TObject * Sender,
  TTreeNode * Source, TTreeNode * Dest)
{
  TBookmarkList * BookmarkList = GetBookmarkList(Sender);
  TTreeView * ProfilesView = GetProfilesView(Sender);
  TStringList * Folders = GetFolders(Sender);

  assert(Source && Source->Data);

  TBookmark * Bookmark = (TBookmark *)Source->Data;
  TTreeNode * PrevFolderNode = Source->Parent;

  if (!Dest || !Dest->Data)
  {
    Bookmark->Node = Dest ? Dest->Text : UnicodeString();
    BookmarkList->MoveTo(BookmarkList->Bookmarks[BookmarkList->Count - 1],
      Bookmark, false);
    ProfilesView->Selected->MoveTo(Dest, naAddChild);
  }
  else
  {
    TBookmark * DestBookmark = (TBookmark *)Dest->Data;

    Bookmark->Node = DestBookmark->Node;
    BookmarkList->MoveTo(DestBookmark, Bookmark,
      Source->AbsoluteIndex > Dest->AbsoluteIndex);
    if (Source->AbsoluteIndex > Dest->AbsoluteIndex)
    {
      Source->MoveTo(Dest, naInsert);
    }
    else if (Dest->getNextSibling() != NULL)
    {
      Source->MoveTo(Dest->getNextSibling(), naInsert);
    }
    else
    {
      Source->MoveTo(Dest, naAdd);
    }
  }

  if (PrevFolderNode && !PrevFolderNode->Count)
  {
    assert(Folders->IndexOfObject(PrevFolderNode) >= 0);
    Folders->Delete(Folders->IndexOfObject(PrevFolderNode));
    PrevFolderNode->Delete();
  }

  Source->MakeVisible();
  UpdateControls();
}
Exemple #5
0
bool __fastcall TMainForm::LoadHexToRAM(String fName, bool bLow)
{
  // Load all the text lines from the .hex file into a String List for easy
  // manipulation

  TStringList *sList = new TStringList;

  if (fName.Pos("VendAX")) {
    GetVendAX(sList);
  } else {
    TFileStream *srcStream = new TFileStream(fName,fmOpenRead | fmShareDenyWrite);
    if (srcStream == NULL) return false;
    sList->LoadFromStream(srcStream);
    delete srcStream;
  }


  String tmp;
  int v;

  // Delete non-data records
  for (int i=sList->Count - 1; i>=0; i--) {
    if (sList->Strings[i].Length()) {
      tmp = sList->Strings[i].SubString(8,2);   // Get the Record Type into v
      v = 0;  HexToBin(tmp.c_str(),(char *)&v,1); v *= 2;
      if (v) sList->Delete(i);                  // Data records are type == 0
    }
  }

  // Re-construct the strings to only contain the offset followed by the data
  for (int i=0; i<sList->Count; i++) {
    // Remove comments
    v = sList->Strings[i].Pos("//");
    if (v) sList->Strings[i].SetLength(v-1);

    // Build string that just contains the offset followed by the data bytes
    if (sList->Strings[i].Length()) {
      // Get the offset
      String sOffset = sList->Strings[i].SubString(4,4);

      // Get the string of data chars
      tmp = sList->Strings[i].SubString(2,2);
      v = 0;  HexToBin(tmp.c_str(),(char *)&v,1); v *= 2;
      String s = sList->Strings[i].SubString(10,v);

      // Replace the string in the list
      sList->Strings[i] = sOffset + s;
    }

  }

  if (bLow) ResetFX2(1);      // Stop the processor

  FX2Device->ControlEndPt->ReqCode = bLow ? 0xA0 : 0xA3;
  FX2Device->ControlEndPt->Index = 0;
  FX2Device->ControlEndPt->Value = 0;

  // Go through the list, loading data into RAM
  String DataString = "";
  WORD nxtoffset = 0;
  LONG xferLen = 0;

  WORD offset;
  int RamSize = 0x2000;  // 8KB

  UCHAR buf[MAX_CTLXFER_SIZE];

  char  c;
  PCHAR pc;

  for (int i=0; i<sList->Count; i++) {
    // Get the offset
    tmp = sList->Strings[i].SubString(1,4);
    HexToBin(tmp.c_str(),(char *)&offset,2);
    pc = (char *) &offset; c = pc[0]; pc[0]=pc[1]; pc[1]=c;  // Swap the bytes

    int sLen = sList->Strings[i].Length();

    // Handle a line that straddles the 8KB boundary
    int bytes = (sLen - 4)/2;
    LONG lastAddr = offset + bytes;

    // This case is the last segment to be sent to low memory
    if (bLow && (offset < RamSize) && (lastAddr > RamSize))
      bytes = RamSize - offset;

    // In this case, we found the first segment to be sent to the high memory
    if (!bLow && (offset < RamSize) && (lastAddr > RamSize)) {
      bytes = lastAddr - RamSize;
      String s = "xxxx"+sList->Strings[i].SubString(sLen - (bytes*2)+1,bytes*2);
      sList->Strings[i] = s;
      offset = RamSize;
    }

    if ((bLow &&  (offset < RamSize)) || // Below 8KB - internal RAM
       (!bLow && (offset >= RamSize)) ) {

      xferLen += bytes;

      if ((offset == nxtoffset) && (xferLen < MAX_CTLXFER_SIZE)) {
        DataString += sList->Strings[i].SubString(5,bytes*2);
      } else {
        LONG len = DataString.Length() / 2;
        if (len) {
          Hex2Bytes(DataString,buf);
          FX2Device->ControlEndPt->Write(buf, len);
        }

        FX2Device->ControlEndPt->Value = offset;  // The destination address

        DataString = sList->Strings[i].SubString(5,bytes*2);

        xferLen = bytes;

      }

      nxtoffset = offset + bytes;  // Where next contiguous data would sit
    }
  }

  // Send the last segment of bytes
  LONG len = DataString.Length() / 2;
  if (len) {
     Hex2Bytes(DataString,buf);
     FX2Device->ControlEndPt->Write(buf, len);
  }

  if (bLow) ResetFX2(0);      // Start running this new code

  return true;

}
Exemple #6
0
//执行任务
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;
}