首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Delphi中设置TStringLists数组时遇到问题

在Delphi中设置TStringLists数组时遇到问题
EN

Stack Overflow用户
提问于 2011-10-13 22:04:05
回答 2查看 4.4K关注 0票数 5
代码语言:javascript
复制
Var
  i : Integer;
  j : Integer;
  oSLArray : array of TStringList;
  oSL : TStringList;
begin
  SetLength(oSLArray, emailPassword.Lines.Count);
  for i := 0 to emailPassword.Lines.Count - 1 do
    {oSLArray[i] := TStringList.Create;
    oSLArray[i].Delimiter := ' ';
    oSLArray[i].DelimitedText := emailPassword.Lines[i];
    for j := 0 to oSLArray[i].Count-1 do begin
      Showmessage( oSLArray[i].Strings[j] );
    end; }
    oSL := TStringList.Create;
    oSL.Delimiter := ' ';
    oSL.DelimitedText := emailPassword.Lines[i];
    for j := 0 to oSL.Count-1 do begin
      Showmessage( oSL[j] );
    end;
  end;

我正在尝试生成一个TStringLists数组,读取来自RichEdit 'EmailPassword‘的内容,然后打印它(当我做到这一点时,我将把它放在一个数组中)。

当我取消注释掉oSLarray时,我得到一个访问冲突。当我在oSL上尝试时,什么也没有打印出来。

现在,我理解访问冲突意味着指针可能未正确设置,因为我认为访问冲突发生在oSLArrayi := TStringList.Create上。

我是不是漏掉了什么小东西?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-13 22:17:58

我已经更正了代码,我相信这段代码会工作,但我只是在脑海中测试过它。

代码语言:javascript
复制
var 
  i : Integer; 
  j : Integer; 
  oSLArray : array of TStringList; 
  oSL : TStringList; 
begin
  if not(Assigned(emailpassword)) then exit;
  SetLength(oSLArray, emailPassword.Lines.Count); 
  for i := 0 to emailPassword.Lines.Count - 1 do begin
    oSLArray[i] := TStringList.Create; 
    oSLArray[i].Delimiter := ' '; 
    oSLArray[i].DelimitedText := emailPassword.Lines[i]; 
    for j := 0 to oSLArray[i].Count-1 do begin 
      Showmessage( oSLArray[i].Strings[j] );   <<--- The error has here
    end; {for j} 
  end; {for i}

    //oSL := TStringList.Create; 
    //try
    //  oSL.Delimiter := ' '; 
    //  oSL.DelimitedText := emailPassword.Lines[i]; 
    //  for j := 0 to oSL.Count-1 do begin 
    //    Showmessage( oSL[j] ); 
    //  end; {for j}
    //finally
    //  oSL.Free;
    //end; {try}
    //end; {for i} 
end;

以下是带有注释的旧代码:

代码语言:javascript
复制
for i := 0 to emailPassword.Lines.Count - 1 do //don't forget begin
  oSLArray[i] := TStringList.Create; 
  oSLArray[i].Delimiter := ' '; 
  oSLArray[i].DelimitedText := emailPassword.Lines[i]; 
//<<<--  Here for i loop should end, but it does not.
    for j := 0 to oSLArray[i].Count-1 do begin 
 //You loop though all members of OSLArtray, even though only the first item is set, 
 //the rest is unassigned.
      Showmessage( oSLArray[i].Strings[j] );  <<-- Access Violation 
    end; } 
票数 7
EN

Stack Overflow用户

发布于 2011-10-13 22:31:57

缺少开始/结束对是问题所在。如果没有注释,

代码语言:javascript
复制
for i := 0 to emailPassword.Lines.Count - 1 do

循环只迭代行

代码语言:javascript
复制
oSLArray[i] := TStringList.Create;

这条线

代码语言:javascript
复制
oSLArray[i].Delimiter := ' '; 

在循环之后执行。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7755342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档