小编Sha*_*deh的帖子

Delphi编译器不会对此代码发出警告

调试我的代码,我注意到Delphi编译器(柏林10.1)没有警告没有返回值的函数.这是正常的吗?

一个简单的例子:

function f(s:string):String;
begin
  stringreplace(s,#32,'',[rfReplaceAll]);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   showmessage(F('te st'));
end;
Run Code Online (Sandbox Code Playgroud)

这条线

 stringreplace(s,#32,'',[rfReplaceAll]);
Run Code Online (Sandbox Code Playgroud)

应该

result:= stringreplace(s,#32,'',[rfReplaceAll]);
Run Code Online (Sandbox Code Playgroud)

没有警告!

我认为它应该警告"返回值可能未定义".但事实并非如此.我在最后几天更改并重写了旧代码的一部分.我恐怕在我的申请中有这种错误.

delphi delphi-10.1-berlin

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

从TStringList中删除重复行而不在Delphi中进行排序

我知道如何使用dupignore从TStringList中删除重复的字符串以用于排序的Tstringlist.

CallData := TStringList.Create;
CallData.Sorted := True;
Call.Duplicates := dupIgnore;
Run Code Online (Sandbox Code Playgroud)

但在我的情况下,字符串不能排序.

当TStringList有数十万行时,使用FOR循环查找重复项非常慢(也使用indexOF()).

 if OpenDialog1.Execute then
  begin
    Try
      y := TStringList.create;
      f := TStreamReader.create(OpenDialog1.FileName, TEncoding.UTF8, True);
      while not f.EndOfStream do
      begin
        l := f.ReadLine;
        X.Add(l);
      end;

      g := Tstreamwriter.create('d:\logX.txt', True, TEncoding.UTF8);
      for I := 0 to X.count - 1 do
      begin


          if y.IndexOf(X[I]) = -1 then

          y.Add(X[I]);

      end;

      for j := 0 to y.count - 1 do
        g.WriteLine(y[j]);

    Finally
      f.free;
      y.free;
      g.free;
    End;
  end;
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法?

delphi

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

从一个单元使用哪些功能

我有一个十多年前开始的大项目.我使用了我创建的单元来定义许多函数,转换日期等等.编译这个项目我得到了数百个提示和警告,几乎所有这些都在这个单元文件中.我认为在去年的项目变更之后我只使用了一些这样的功能.然后最好从项目中排除此单元文件并在新单元中复制使用过的函数.我决定在USES部分注释掉这个单位名称并找出使用了哪些功能,但是它很难,因为项目有大约150个表格!此单元中还有数百个功能,我不能为每个功能使用"搜索用法"

任何方案?

delphi

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

分配的值从未使用过.Delphi bug还是代码bug?

此代码是我在我的应用程序中使用的第三方组件的一部分.我正在尝试解决与我的应用程序中的提示相关的所有可能问题.但我无法理解这一点.Delphi Compiler标记了这段代码的第一行,提示"分配给NewState的值从未使用过!我只是想了解情况

  NewState := STATE_UNCHECKED;   //Value assigned never used?Really?
  while ( Node <> nil ) and ( Node.Parent <> nil ) do
  begin
    Node := Node.Parent.GetFirstChild;
    CheckedCount := 0;
    UnCheckedCount := 0;
    while True do
    begin
     ....
      if ( Node.StateIndex = STATE_PARTCHECKED ) or
         ( ( CheckedCount > 0 ) and ( UnCheckedCount > 0 ) ) then
      begin
        NewState := STATE_PARTCHECKED; ///assign value on condition
        Break;
      end;

      if Node.GetNextSibling = nil then
      begin
        if CheckedCount > 0 then
          NewState …
Run Code Online (Sandbox Code Playgroud)

delphi

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

标签 统计

delphi ×4

delphi-10.1-berlin ×1