Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi TcxGrid更正列中的拆分行_Delphi - Fatal编程技术网

Delphi TcxGrid更正列中的拆分行

Delphi TcxGrid更正列中的拆分行,delphi,Delphi,我的TcxGrid中有三列,每次找到“|”时都需要拆分到下一列。 所以我需要这个: 科诺姆电信公司 a 33 我一直在考虑如何处理每一个专栏,并找出下一个字符是否是“|”,但我不知道是否可以用find方法来完成 试试类似的方法(只是从我脑子里想出来,没有经过测试): 如果您的Delphi版本不支持SplitString,您可以这样做: var I, J, K, L : Integer; S, T : String; // Some of your code omi

我的TcxGrid中有三列,每次找到“|”时都需要拆分到下一列。 所以我需要这个: 科诺姆电信公司 a 33

我一直在考虑如何处理每一个专栏,并找出下一个字符是否是“|”,但我不知道是否可以用find方法来完成

试试类似的方法(只是从我脑子里想出来,没有经过测试):

如果您的Delphi版本不支持SplitString,您可以这样做:

var
    I, J, K, L : Integer;
    S, T    : String;
    // Some of your code omitted
begin
    // Some of your code omitted
    for J := 0 to aFile.Count - 1 do begin
        S := aFile[J]; 
        L := 0;
        I := 1;
        while I <= Length(S) do begin
             K := I;
             while (K <= Length(S)) and (S[K] <> '|') do
                 Inc(K);
             if K > Length(S) then
                 T := Copy(S, I, K - I + 1)
             else 
                 T := Copy(S, I, K - I);
            cxGrid1TableView1.DataController.Values[J, L] := T;
            Inc(L);
            I := K + 1;
        end;
    end;    
    // Some of your code omitted
end;
var
一、 J,K,L:整数;
S、 T:弦;
//您的一些代码被省略了
开始
//您的一些代码被省略了
对于J:=0到文件。计数-1开始
S:=aFile[J];
L:=0;
I:=1;

而我你也可以使用好的旧
TStringList

var
  SL: TStringList;
  iFile, I : Integer;
begin
  SL := TStringList.Create;
  try
    SL.Delimiter := '|';
    SL.StrictDelimiter := true;
    for iFile := 0 to aFile.Count - 1 do
    begin
      SL.DelimitedText := aFile[iFile];
      for I := 0 to SL.Count - 1 do
        cxGrid1TableView1.DataController.Values[iFile, I] := SL[I];
    end;    
  finally
    SL.Free;
  end;
end;

@MartynA他只想拆分一个包含分隔符的字符串(例如,
a | b | 3
)。确切地说,当字符串遇到这个“|”@marcol1时,我需要将字符串拆分到下一列。不要将代码作为文本而不是屏幕截图发布。使用“代码示例”按钮({})。@UliGerhardt我尝试使用括号,但它无法正确显示我的代码…此处不接受代码图像。代码是文本,可以直接复制粘贴到您的帖子中。请删除代码图像并将其替换为文本形式的代码。有关更多信息,请参阅@fpiette谢谢您的建议,但我认为我的delphi版本不接受TStringDynArray:(@marco1 TStringDynArray已经很长一段时间不存在了。您必须找到您的版本的单位(类型或SysUtils或…)。请使用delphi“在文件中查找”搜索Delphi源目录。顺便问一下,您使用的是哪个Delphi版本?@fpiette Delphi2007…我用CTRL+MAIUSC+F搜索过,但找不到it@Marcol1no我编辑了我的答案,只使用了非常古老的Delphi功能:没有TStringDynArray和SplitString。我没有D2007要检查,但我几乎肯定它会编译。顺便说一下,为什么不升级到最新的Delphi版本?与D2007相比,它有着巨大的增强。Fwiw我能在Marco的Delphi书籍中找到的最早的参考是Delphi XE。这正是我需要的!!!谢谢!它被正确拆分了,但是我的正则表达式(使用RegexBuddy创建)无法工作…如何将我的正则表达式与SL[i]中的所有行匹配?我尝试过使用'regex.Subject:=SL[i];如果(regex.match),则开始regex.SubExpressions[regex.NamedSubExpression('Name')];showmessage(regex.SubExpressions[regex.NamedSubExpression('Name'));end;'请用您迄今为止尝试过的代码为此创建一个新问题!它不允许我创建一个新帖子,因为它的格式不太好…我只放了这个
MY code…
如何正确设置格式?如果您能帮我,这就是新帖子
var
  SL: TStringList;
  iFile, I : Integer;
begin
  SL := TStringList.Create;
  try
    SL.Delimiter := '|';
    SL.StrictDelimiter := true;
    for iFile := 0 to aFile.Count - 1 do
    begin
      SL.DelimitedText := aFile[iFile];
      for I := 0 to SL.Count - 1 do
        cxGrid1TableView1.DataController.Values[iFile, I] := SL[I];
    end;    
  finally
    SL.Free;
  end;
end;