Boa tarde Carlos.
Estive consultando o manual do Bradesco como base para sua questão, e nas posições 109 e 110 estão os códigos de ocorrência que serão 00 caso não seja nenhum da lista do manual do banco.
Podemos confirmar com o suporte do bradesco, porém acredito que se nas posições 319 a 318 se as posições com "00" estiverem no final é pq não correspondem a motivo nenhum...como no seu exemplo.
Eu acredito que vc deveria checar apenas as posições da coluna 109 e 110 se elas forem diferente de "00" então faz operação para pegar as descrições.
MotivoRejeicaoComando := copy(Linha,319,2);
if MotivoRejeicaoComando <> '00' then
MotivoLinha := 319; //Muda o valor da coluna do motivo para pegar todos os motivos.
for i := 0 to 4 do
begin
//MotivoRejeicaoComando.Add(copy(Linha,MotivoLinha,2));
MotivoRejeicaoComando.Add(IfThen(copy(Linha,MotivoLinha,2) = '00',
'00',copy(Linha,MotivoLinha,2)));
....
Ainda preciso olhar os manuais dos outros bancos...mas para o Bradesco eu acho que isso resolve
At