for循环中的变量没有被调用

凯瑟琳·詹森

我正在使用DBXJson解析一个名为的简单json文件,response.json并在网格中显示其内容,但是只有网格的第一行才会填充数据,即使有更多行/数据要显示。我在下面的代码中使用自定义网格,但是我尝试使用标准stringgrid修改以下代码,并且表现出相同的行为。这是我用来解析响应并将其显示在网格中的代码。

var
  sl: TStringList;
  LJsonArr: TJSONArray;
  LJsonValue: TJSONValue;
  LItem: TJSONValue;
  col, row: Integer;
begin
  col := 0;
  row := 0;

  sl := TStringList.Create;
  sl.LoadFromFile('response.txt');
  LJsonArr := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(sl.text), 0)
    as TJSONArray;

  for LJsonValue in LJsonArr do
  begin
    NextGrid1.AddRow();

    for LItem in TJSONArray(LJsonValue) do
    begin
      NextGrid1.Cells[col, row] := TJSONPair(LItem).JsonValue.Value;
      inc(col);
    end;
    inc(row);
  end;
  sl.Free;
end;

我怀疑问题出在以下事实:row变量不正确并且没有被调用,并且仅导致第一行显示,但是我可能会误会,希望新的眼睛能够发现问题。

大卫·赫弗南(David Heffernan)

问题是,col每次开始新行时必须将其重新初始化为零。因此,将的初始化col移到外循环中。

row := 0;
for LJsonValue in LJsonArr do
begin
  col := 0;
  NextGrid1.AddRow();
  for LItem in TJSONArray(LJsonValue) do
  begin
    NextGrid1.Cells[col,row] := TJSONPair(LItem).JsonValue.Value;
    inc(col);
  end;
  inc(row);
end;

我不知道这个JSON库,但是如果它允许您以随机访问方式访问数组元素,那么传统的oindexed for循环将导致您使用for in循环的更简洁的代码。用伪代码:

for row := 0 to arr.length do
begin
  item := arr[row];
  for col := 0 to item.length do
    grid.Cells[col,row] := item[col];
end;

根据经验,如果不需要知道项目索引,则for in循环会更好。但是,一旦您需要了解项目索引,则通常首选传统的for循环索引。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

变量没有从 for 循环中获取值

循环中的可调用变量

在 for 循环中调用变量 - BATCH

for循环中的python调用变量

在 PostgreSQL 的 for-in 循环中没有调用函数

变量在循环中没有按预期改变

我的 while 循环中的变量没有被更新

在 for 循环中使用参数调用 javascript 函数:有没有办法暂停循环?

如何在for循环中调用变量?

在 for 循环中调用列表中的变量

在Python中的for循环中调用列表变量

有没有更有效的方法在for循环中创建新变量?

有没有办法在循环中拥有更多相关的变量名?

有没有办法在for循环中使用“点调用”?

有没有一种方法可以在单行for循环中增加变量?

有没有办法在循环中获取$ _POST变量?

有没有办法在 while 循环中存储变量?

有没有办法将 ForEach 循环中的变量导出到每行的 CSV 输出

有没有办法在for循环中更改函数中使用的变量?

有没有办法从 for 循环中的通配符中排除某些值/变量

sinon spy 没有在生成器循环中注册调用?

如何在没有事件的情况下在循环中调用 React 函数?

如何跟踪while循环中由函数调用产生的编号变量。那里有多少?

在没有局部变量访问的情况下继续在 for 循环中附加 [to stream]

在循环中声明变量但在 c 中没有初始化

循环中带有按钮的调用方法

有没有更好的方法在循环时显示不同的文本并询问相同的变量而无需在循环中添加X?

Python没有在for循环中释放内存

for循环中没有条件?