小编Ste*_*e F的帖子

如何从SCADA CIMPLICITY软件的DAT和IDX文件中提取数据?

我的任务是从旧软件的数据文件中提取数据 - CIMplicity HMI Plant Edition 6.0版.它是2002年的SCADA软件.我有一份数据文件目录,里面包含很多*.DAT和*.IDX文件.我需要将此数据提取到CSV或SQL数据库.一些DAT文件只是纯文本,但其他文件具有类似二进制的格式,在PSPad中打开时,以HEX视图模式显示.

我可以使用哪些工具可靠地从这些文件中读取和提取数据?

TIA.

更新:我已经添加了包含数据文件的目录的目录列表:

 Directory of C:\tmp\xxxxxxII\data

04/30/2013  01:53 PM    <DIR>          .
04/30/2013  01:53 PM    <DIR>          ..
09/02/2008  10:46 AM            17,260 1220323606.clz
09/02/2008  10:46 AM            60,490 1220323607.clz
09/10/2008  06:36 PM           288,554 1220323608.clz
09/02/2008  10:46 AM            66,977 1220323609.clz
09/10/2008  06:37 PM            23,900 1220323610.clz
09/10/2008  06:37 PM            19,162 1220323611.clz
09/10/2008  06:48 PM            37,596 1220323612.clz
09/10/2008  06:49 PM            27,882 1220323613.clz
09/10/2008  06:49 PM            47,850 1220323614.clz
09/10/2008  06:50 PM            47,816 1220323615.clz
09/10/2008  06:52 PM         3,427,511 1220323616.clz
09/02/2008  10:46 …
Run Code Online (Sandbox Code Playgroud)

parsing scada data-extraction

7
推荐指数
1
解决办法
7165
查看次数

SynEdit:如何在给定开始和停止位置的情况下对多个文本区域进行背景突出显示?

使用:Delphi XE2,Windows VCL表单应用程序,32位

我正在使用SynEdit控件来显示文本.我已经在控件中使用TSynHTMLSyn语法高亮显示器来正确地突出显示HTML和JS代码.

我也正在对这个文本(使用Angus Johnson的TDiff)和另一个版本的文本进行差异查找:删除,添加和更改.我需要使用不同的颜色突出显示每种类型的更改,即RED表示删除,BLUE表示添加,GREEN表示更改.

我的问题:

  1. 有可能实施吗?
  2. 如果是,那怎么样?

TIA.

delphi synedit

6
推荐指数
1
解决办法
1711
查看次数

如何重定向CreateProcess执行的命令的大量输出?

我需要从命令行运行sqlite backup命令.我不想使用"cmd/c".命令是:

sqlite3.exe MYDB.db .dump> MYDB.bak

我在SO上找不到任何显示如何执行此操作的示例.

到目前为止,从各种SO帖子收集的代码是这样的,但是非常不完整:

function StartProcess(const ACommandLine: string; AShowWindow: boolean = True;
  AWaitForFinish: boolean = False): Integer;
var
  CommandLine: string;
  StartupInfo: TStartupInfo;
  ProcessInformation: TProcessInformation;
  StdOutPipeRead, StdOutPipeWrite: THandle;
  Handle: boolean;
begin
   Result := 0;
   FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
   FillChar(ProcessInformation, SizeOf(TProcessInformation), 0);
   StartupInfo.cb := SizeOf(TStartupInfo);

   StartupInfo.hStdInput := GetStdHandle(STD_INPUT_HANDLE);
   StartupInfo.hStdOutput := StdOutPipeWrite;
   StartupInfo.hStdError := StdOutPipeWrite;

   if not(AShowWindow) then
   begin
   StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
   StartupInfo.wShowWindow := SW_SHOWNORMAL;
   end;

   CommandLine := ACommandLine;
   UniqueString(CommandLine);
   Handle := CreateProcess(nil, PChar(CommandLine), nil, nil, False,
   CREATE_NEW_PROCESS_GROUP + NORMAL_PRIORITY_CLASS, …
Run Code Online (Sandbox Code Playgroud)

delphi winapi

5
推荐指数
1
解决办法
2054
查看次数

VirtualStringTree - 指针存储<>指针检索!我的编码方法有误吗?

我正在使用TVirtualStringTree来存储指向记录的指针.

最初有一个包含记录列表的TList.

我正在使用OnInitNode事件迭代TList并将每个记录的数据分配给树的节点.

但是,在检索与OnNewText事件处理程序中的节点关联的数据时,返回的指针具有与最初存储在树中的指针不同的地址.

此外,我可以通过调试从节点中检索到的指针(该记录的数据)是看一样最初存储在该节点的一个.我需要将更改的数据保存到数据库,并需要使用更改的数据引用记录.引用指针应该很简单,但问题是指针不一样.

我不确定我做错了什么,希望有人可以帮我解决这个问题.

提前致谢.

这是我的代码:

数据结构和声明:

  TTherapData = record
    TherapID: Integer;
    TherapName: String[120];
    TherapInstr: String[120];
    Selected_DB: Byte;
    Selected: Byte;
  end;

  PTherapData = ^TTherapData;

  FTherapDataList: TList<PTherapData>;

  FTherapDataListAsg_Iter: Integer;

  vstRxList_Asg: TVirtualStringTree;
Run Code Online (Sandbox Code Playgroud)

将数据加载到TList中,然后加载到树中:

procedure TfmPatient_Conslt.LoadTherapList(const ADBLoad: Boolean = False);
var
  TherapData: PTherapData;
  d, x: Integer;
begin
    datamod.uspLKTHERAP_S.First;
    while not datamod.uspLKTHERAP_S.Eof do
    begin
      New(TherapData);

      TherapData^.TherapID := datamod.uspLKTHERAP_SROW_ID.AsInteger;
      TherapData^.TherapName := datamod.uspLKTHERAP_SIMPRTHERAP.AsString;
      TherapData^.TherapInstr := EmptyStr;
      TherapData^.Selected := 0;
      TherapData^.Selected_DB := 0;

      FTherapDataList.Add(TherapData);

      datamod.uspLKTHERAP_S.Next;
    end;


    datamod.uspCONSLT_RX_S.First;
    while not datamod.uspCONSLT_RX_S.Eof do
    begin
      d …
Run Code Online (Sandbox Code Playgroud)

delphi virtualtreeview tvirtualstringtree

5
推荐指数
1
解决办法
271
查看次数

Delphi 7 - DCPCrypt - TDCP_rijndael - DecryptString - 如何使其工作?

我正在 PHP 中加密文本(openssl_encrypt / 'aes-256-cbc'),然后尝试在 Delphi 7 中解密(DCPCrypt / TDCP_rijndael)。

PHP脚本文件以ANSI编码保存,希望传输的字符串(它是REST API Web服务)与Delphi兼容。

然而,Delphi 解密产生了错误的结果,我猜测代码中有问题。如果您能看一下并发现我在 Delphi 方面的错误,我将不胜感激:

PHP代码:

function encrypt($key, $payload) {
    $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
    $encrypted = openssl_encrypt($payload, 'aes-256-cbc', $key, 0, $iv);
    return base64_encode($encrypted . '::' . $iv);
}

function decrypt($key, $garble) {
        list($encrypted_data, $iv) = explode('::', base64_decode($garble), 2);
        return openssl_decrypt($encrypted_data, 'aes-256-cbc', $key, 0, $iv);
}
Run Code Online (Sandbox Code Playgroud)

德尔福代码:

var
  DCP_rijndael: TDCP_rijndael;

const
  cPASSWORD = 'myownpassword';

function Decrypt(AStr: string): string;
var
  d, s, iv: String;
  p: Integer;
begin
  d := Base64DecodeStr(AStr);
  p …
Run Code Online (Sandbox Code Playgroud)

delphi encryption delphi-7 encryption-symmetric php-openssl

4
推荐指数
1
解决办法
2994
查看次数

是否可以引用字段父类

使用:Delphi XE2

类具有另一个类的字段.

在该字段的过程中是否可以引用容器类?

Type TClassA = class
 procedure ClassAMethod;
end;

Type TClassB = class
 ClassA : TClassA; 
end;

procedure TClassA.ClassAMethod;
begin
 // is it possible to get a reference to the 
 // owning ClassB object here?
end;
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe2

3
推荐指数
1
解决办法
273
查看次数

如何在某个字符前限制匹配长度?

我使用以下正则表达式扫描输入文本文件以获取有效的电子邮件.

[A-Za-z0-9!#$%&*+/=?^_`{|}~-]+(?:\.[A-Za-z0-9!#$%&*+/=?^_`{|}~-]+)*@(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\.)+[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?
Run Code Online (Sandbox Code Playgroud)

现在我还需要在电子邮件地址中的"@"符号前将匹配限制为20个字符,但不知道如何操作.

PS.我正在使用Delphi XE2中的Perl正则表达式库(TPerlRegex).

你能帮帮我吗?

regex perl

2
推荐指数
1
解决办法
225
查看次数

Indy IMAP - 用于识别新电子邮件的属性?

使用:Delphi XE2,来自SVN的最新Indy快照(10.6.0.4997)

在IMAP的情况下,有2个属性--UID和MsgID,可用于唯一标识邮箱中的邮件.

  1. 我正在编写一个电子邮件客户端,并且需要知道每次客户端连接和检索消息列表时哪个更可靠或建议存储.

  2. 检查新电子邮件需要哪些步骤?我特意寻找正确的序列和一组Indy IdIMAP4命令来获取新的电子邮件.

TIA.

delphi imap indy

2
推荐指数
1
解决办法
2486
查看次数

Delphi - TThread可以在主VCL线程中更改变量的值吗?

使用:Delphi XE2,Windows VCL Forms应用程序

TThread在执行期间是否可以更改主VCL线程中变量的值?

需要更新一个被声明为TForm类的字段的Integer.它将作为重载(并重新引入)Create构造函数方法中的var变量传递给TThread.

这有什么后盾吗?

delphi tthread

1
推荐指数
1
解决办法
2271
查看次数

TClientDataSet错误:"缺少数据提供程序或数据包"

我正在Delphi中的代码中创建一个TClientDataSet和TDataSetProvider,并从TUniQuery(Devart UniDAC)加载数据.在设置数据集提供程序和clientdataset的属性后,我尝试打开clientdataset并获取运行时异常:"缺少数据提供程序或数据包".

我不确定为什么会这样,如果有人能指出究竟是什么问题,我会很高兴.

这是我的代码:

//uq is a TUniQuery correctly set to an active TUniConnection

cdsFirstNames := TClientDataSet.Create(nil);
dspFirstNames := TDataSetProvider.Create(nil);
try
  uq.SQL.Text := 'SELECT * FROM firstnames;';
  uq.Prepared := True;
  // uq.Open;
  dspFirstNames.Name := 'dspFirstNames';
  dspFirstNames.DataSet := uq;
  cdsFirstNames.ProviderName := 'dspFirstNames';
  cdsFirstNames.Open;  // <--- Exception occurs here!
  uq.Close;
  showmessage(IntToStr(cdsFirstNames.RecordCount));
Run Code Online (Sandbox Code Playgroud)

delphi tclientdataset

1
推荐指数
1
解决办法
9990
查看次数

确定日期时间编码或格式

我正在编写一个 Delphi 程序,该程序需要与存储在属于另一个程序的 SQLite 数据库中的数据进行交互。到目前为止一切正常,除了我无法从 SQLite 数据库的列中的数据存储中获取数据类型为“datetime”的日期/时间值。

我确实知道字段的数据类型在 SQLite 中是不相关的,并且所有内容都存储为字符串,也许这就是我发现自己陷入这种困境的原因。

下面是存储在 SQLite 数据库中的几行数据(第 3 列)与读取和写入此 SQLite 数据库的程序(第 2 列)中显示的相应日期值的示例:

1   11/7/1971   621939168000000000
2   3/17/1976   623314656000000000
3   5/4/1996    629667648000000000
4   9/21/2007   633259296000000000
5   11/17/1972  622264032000000000
6   2/7/1996    629592480000000000
7   6/13/2000   630964512000000000
Run Code Online (Sandbox Code Playgroud)

我的要求:当我从 Delphi 程序中读取第 3 列中的值后,如何将其转换为与第 2 列中显示的相同日期/时间值?我尝试过 UnixToDateTime 函数,但它不会产生相同的值(如第 2 列)。有人可以帮忙吗?

提前致谢!

delphi datetime-format

1
推荐指数
1
解决办法
217
查看次数

Generic TList.Sort出现"堆栈溢出"错误

我已经实现了Generics.Defaults.TComparer来排序类型化的TList.但是,在调用Sort方法时,它会抛出异常"Stack overflow at ..."

为什么发生堆栈溢出错误?

// Declarations

  TOrder = record
    ID: Integer;
    OrderDate: TDate;
  end;

  POrder = ^TOrder;

  FOrderList: TList<POrder>;

  TComparer_OrderDate = class(TComparer<POrder>)
  public
    function Compare(const a, b: POrder): Integer; override;
  end;

function TComparer_OrderDate.Compare(const a, b: POrder): Integer;
begin
  Result := 0;

  if (a^.OrderDate> b^.OrderDate) then
    Result := 1
  else
    Result := -1;
end;


  // This code inside a button OnClick event: 
  FOrderList := TList<POrder>.Create;

  FComparer_OrderDate := TComparer_OrderDate.Create;

  FOrderList.Sort(FComparer_OrderDate); // <--- 'stack overflow' error.
Run Code Online (Sandbox Code Playgroud)

delphi tlist delphi-10-seattle

0
推荐指数
1
解决办法
359
查看次数