小编WeG*_*ars的帖子

是否可以有两个同名的属性?

是否可以有两个同名的属性?

property  Cell [Cl, Rw: Integer]: string   read getCell  write setCell;
property  Cell [ColName: string; Rw: Integer]: string read getCellByCol write setCellByCol;
Run Code Online (Sandbox Code Playgroud)

好吧,我试过了,编译器不会让我这样做,但也许有一个技巧......?

delphi delphi-xe7

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

查找8GB +文本文件中的"密钥"

我有一些'小'文本文件,包含大约500000个条目/行.每行还有一个"键"列.我需要在一个大文件中找到这个密钥(8GB,至少2.19亿条目).找到后,我需要将大文件中的'Value'附加到小文件中,在行的末尾作为新列.

像这样的大文件:

KEY                 VALUE
"WP_000000298.1"    "abc"
"WP_000000304.1"    "xyz"
"WP_000000307.1"    "random"
"WP_000000307.1"    "text"
"WP_000000308.1"    "stuff"
"WP_000000400.1"    "stuffy"
Run Code Online (Sandbox Code Playgroud)

简单地说,我需要在大文件中查找"密钥".

显然我需要在RAM中加载整个表(但这不是我有32GB可用的问题).大文件似乎已经排序了.我得检查一下.
问题是我无法使用类似TDictionary的快速查找,因为正如您所看到的,密钥并不是唯一的.

注意:这可能是一次性计算.我将使用该程序一次,然后扔掉它.因此,它不一定是最佳算法(难以实现).它只需要在适当的时间内完成(如1-2天).PS:我更喜欢没有DB这样做.

我正在考虑这个可能的解决方案:TList.BinarySearch.但似乎TList仅限于134,217,727(MaxInt div 16)项目.所以TList不会工作.


结论:
我选择了Arnaud Bouchez解决方案.他的TDynArray令人印象深刻!如果你需要处理大文件,我完全推荐它.
AlekseyKharlanov提供了另一个不错的解决方案,但TDynArray已经实现.

delphi sorting algorithm search

13
推荐指数
3
解决办法
1960
查看次数

Delphi XE - 我应该使用String还是AnsiString?

我终于升级到了Delphi XE.我有一个单元库,我使用字符串来存储普通的ANSI字符(A和U之间的字符).我101%肯定我永远不会在那些地方使用UNICODE字符.

我想将所有其他库转换为Unicode,但对于这个特定的库,我认为坚持使用ANSI会更好.优点是内存要求,因为在某些情况下我加载了非常大的TXT文件(仅包含Ansi字符).缺点可能是当我使这些库与普通(unicode)库交互时,我必须做很多很多的类型转换.

有一些通用指南可以说明何时转换为Unicode以及何时坚持使用Ansi?

delphi delphi-unicode

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

是否有复制的ANSI版本?

在Delphi XE下,是否有ANSI版本的Copy?我正在使用Copy来复制ANSI字符串的各个部分.

delphi delphi-unicode

12
推荐指数
2
解决办法
4748
查看次数

什么可能导致"目标多字节代码页中不存在Unicode字符的映射"?

我有一个EurekaLog错误报告显示EEncodingError.日志指向TFile.AppendAllText.我打电话TFile.AppendAllText是我的这个程序:

procedure WriteToFile(CONST FileName: string; CONST uString: string; CONST WriteOp: WriteOpperation; ForceFolder: Boolean= FALSE);     // Works with UNC paths
begin
 if NOT ForceFolder
 OR (ForceFolder AND ForceDirectoriesMsg(ExtractFilePath(FileName))) then
   if WriteOp= (woOverwrite)
   then IOUtils.TFile.WriteAllText (FileName, uString)
   else IOUtils.TFile.AppendAllText(FileName, uString);
end;
Run Code Online (Sandbox Code Playgroud)

这是来自EurekaLog的信息.

在此输入图像描述

在此输入图像描述

是什么导致这种情况发生?

delphi unicode delphi-xe7

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

为什么Sysutils.RenameFile内联?

[dcc32提示] H2443内联函数'RenameFile'尚未展开,因为在USES列表中未指定单位'Winapi.Windows'

我知道内联函数可以使代码更快.但我只看到了紧张的地方.例如,在一个大循环中调用一个小函数.

但如何内联IO功能可以提高速度?我的意思是通过内联RenameFile你可以获得几微秒.但是如果磁盘忙,执行函数本身可能需要几毫秒,甚至几十毫秒.

更重要的是,如果您使用的是RenameFile,那么您可能正处于执行其他I/O操作的代码块中.因此,这段代码将花费大量时间.所以,现在的收益更加微不足道.

delphi inline

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

Form.Release + NIL

如果在使用表单后调用Form.Release,它将释放所有相关内存但不将表单变量设置为nil.

if not assigned (Form1) then
  begin
    Application.CreateForm(Tform1, Form1);
    try
      // Do something
    finally
      Form1.Release
    end;
  end;
Run Code Online (Sandbox Code Playgroud)

为了能够再次调用相同的代码,Form1必须在某个时候设置为nil.从发布的描述我做不到

Form1 := nil;
Run Code Online (Sandbox Code Playgroud)

在Release之后,因为Release程序将在被调用之后和实际释放表单之前直接返回.我无法检测Form.Release何时完成将表单var设置为nil.

做这个的最好方式是什么?

delphi winapi vcl

11
推荐指数
3
解决办法
7278
查看次数

如何检测笔记本电脑何时使用电池?

如何检测(来自Delphi)笔记本电脑何时使用电池(或AC)运行?

delphi

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

Delphi XE显示至少200个错误,但程序编译得很好

我全新的Delphi XE在"结构"面板中显示了数百个错误.它显示错误,如"第130行未声明的FileExists"或"第242行未声明的创建".即使它显示了这些错误,程序编译就好了.

我也看到代码洞察力并不总是有效.当我将光标移到变量上时,光标开始闪烁,不会出现弹出窗口.其他时候,它只是突出显示一些红色单位,它说它找不到它们.

有解决所有这些问题的技巧吗?


更新/伪修复:
我发现重启IDE有一段时间了.
我真的很有帮助,有一天Embarcadero将发布Delphi ST(来自STable).
:)

delphi delphi-xe

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

为什么我可以在btn为NIL时访问btn.Caption?

为什么这段代码不会崩溃?T没有.它是如何可以访问Caption是否Tnil

procedure Crash;                                                                          
VAR T: TButton;
begin
 T:= NIL;
 T.Caption:= ''; <---------- this works
end;
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe7

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