Delphi 删除字符';他在回答问题

Delphi 删除字符';他在回答问题,delphi,delphi-xe2,Delphi,Delphi Xe2,我有这个例子 DISC506002000001008100021041511207123051520515308154091550920TN177869-0151J1 36J207 70077 0 0 正在尝试提取TN177869-0151J1 但是我使用的代码一直在返回我所有的答案 function TForm5.ParseDataPartNumber(Data: AnsiString):ansistring; var ExtraDa

我有这个例子

DISC506002000001008100021041511207123051520515308154091550920TN177869-0151J1     36J207 70077       0                 0
正在尝试提取
TN177869-0151J1

但是我使用的代码一直在返回我所有的答案

function TForm5.ParseDataPartNumber(Data: AnsiString):ansistring;
var
   ExtraData: Ansistring;
begin
    extraData := data;
    Delete(extraData,76,30);
    Delete(extraData,0,61);
    result:=extraData;
end;

我做错了什么?这是因为它是一个ansistring而不是string吗?这让我很生气?

您的代码无法工作,因为您在方法的参数中传递了错误的值。无论如何,你可以像这样使用这个函数

function TForm5.ParseDataPartNumber(const Data: AnsiString): ansistring;
begin
    Result:=Copy(Data, 62,15);
end;

字符串基于1,因此将第二次删除更改为索引1而不是0

即:


您的索引也错误,无法提取该字符串。我的回答显示了价值观的变化

当前公认的答案更好地解决了OP的原始问题,但从性能角度来看,这是OP应该实现的解决方案。1次拷贝比2次删除快很多。@Lieven与其说是性能不如说是清晰和简单。性能是一个很好的结果。没错,这使它变得更好。OP可以吃蛋糕,也可以吃蛋糕。为什么不使用
Copy()
function TForm5.ParseDataPartNumber(Data: AnsiString):ansistring;
var
   ExtraData: Ansistring;
begin
    extraData := data;
    Delete(extraData,77,43);
    Delete(extraData,1,61);
    result:=extraData;
end;