将pascal转换为python

2024-10-01 15:47:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下Pascal程序:

function TForm1.ldExtractFromLine (ldline: String; Post: Integer): String;
var
  s: String;
  t: array[1..15] of String;
  i, iT: Integer;
begin
  s := Trim(ldline);
  iT := 1;
  while s <> '' do
  begin
    s := Trim(s) + ' ';
    i := 1;
    while s[i] <> ' ' do Inc(i);
    t[iT] := Copy(s, 1, i-1);
    Inc(iT);
    s := Copy(s, i, Length(s));
  end;
  ldExtractFromLine := '';
  if Post < iT then ldExtractFromLine := t[Post];
end;

我正在尝试转换成Python。以下是我目前所掌握的情况:

^{pr2}$

然而,执行例程会导致无休止的“lala”被打印到stdout。问题是Pascal列表以索引1开头,Python列表以索引0开头。这真让我困惑。有人能找到我的错误吗?变量post是一个通常小于20的整数。变量ldline是一个字符串,看起来有点像“10060-24-1601001001001001301.dat”。在

[编辑]

整个脚本可以在此处查看:

https://github.com/Jeremy1980/LDBoxer

以下是一些输入数据的示例:

0 Safe House
0 Name: building_013_safehouse.ldr
0 Author: Kevin Loch
0 ROTATION CENTER 0 0 0 1 "Custom"
0 ROTATION CONFIG 0 0
1 0 60 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat
1 0 60 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat
1 0 -20 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat
1 0 -20 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat
1 0 -100 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat
1 0 -100 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat
1 0 -180 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat
1 0 -180 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat

更多数据输入示例如下:

https://github.com/Jeremy1980/LDBoxer/issues/4


Tags: stringitintegerpostdodatincend
1条回答
网友
1楼 · 发布于 2024-10-01 15:47:45

代码中的错误在以下行中:

s = s[i:(i+len(s)+1)]

在字符串s中留下一个前导空格,导致无限循环,(i+len(s)+1)部分错误。可替换为:

^{pr2}$

一般来说,这个pascal函数只需拆分字符串并获得第Post-个元素(基于1)。相当于这样:

def ldExtractFromLine (ldline, post):
    a = ldline.split()
    if post <= len(a):
        return a[post-1]
    return ''   

相关问题 更多 >

    热门问题