2015-01-28 2 views
-1

У меня есть этот AnsiString, напримерУдаление Чара в AnsiString

DISC506002000001008100021041511207123051520515308154091550920TN177869-0151J1  36J207 70077  0     0 

Попытка извлечь TN177869-0151J1

но код, я использую постоянно возвращается мне всю AnsiString.

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

Что я делаю неправильно? Это из-за того, что он является подписью вместо строки? это меня отбрасывает?

ответ

2

Строки 1 на основе, поэтому изменить ваш второй Удалить с индексом 1 вместо 0.

т.е.

function TForm5.ParseDataPartNumber(Data: AnsiString):ansistring; 
var 
    ExtraData: Ansistring; 
begin 
    extraData := data; 
    Delete(extraData,77,43); 
    Delete(extraData,1,61); 
    result:=extraData; 
end; 

Ваши показатели были неправильно, чтобы извлечь эту строку. Мой ответ показывает измененные значения.

+0

Спасибо, что сработал. –

+0

Почему бы не использовать 'Copy()' вместо этого? –

+0

Nevermind, еще не видел ответа RRUZ –

9

Ваш код не работает, потому что вы передаете неправильные значения в параметрах метода Delete. В любом случае вы можете использовать функцию Copy вместо как так

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

В текущем принятом ответе лучше всего ответить на исходный вопрос OP, но с точки зрения производительности это решение, которое реализует OP shoud. 1 Копия - это величина быстрее, чем 2 удаления. –

+5

@ Lieven Это не столько производительность, сколько ясность и простота. Перфект - хорошее следствие. –

+0

Правда, это еще лучше. OP может иметь торт и съесть его тоже. –

Смежные вопросы