Ahh, BCD olarak tanımlanır. 6502 meclisinde kullanırsan Honk.
Elbette, en iyi bahis COBOL MOVE'un işi sizin için yapmasına izin vermektir! Bu olasılıklardan biri yardımcı olabilir.
(Olasılık # 1) Ana sisteme ve kaynak koduna erişiminiz olduğunu varsayar ve çıktı dosyası SADECE kullanımınız içindir, programı değiştiriniz, bu yüzden sadece değeri basit bir ambalajsız PIC S9'a taşıyın (7) V99.
(Olasılık # 2) Bu kadar kolay olmadığınızı varsayarak, (örneğin, başka bir pgms için dosya girilmişse veya kodu değiştiremiyorsanız), sistemde başka bir COBOL programı yazabilir ve bu dosyayı okur ve başka bir yazar. . Dosya kayıt düzenini BCD ile kesin ve giriş ve çıkış dosyaları için yeni programa yapıştırın. Paketlenmemiş olması için çıktı sürümünü değiştirin. Bir kayıt okuyunuz, verileri aktarmak için 'karşılık gelen' yapınız ve yazınız. Ardından, dosyasını dosyasına aktarın.
(Muhtemelen # 3) Ana bilgisayara dokunamıyorsanız, yorumunuza bağladığınız makaledeki açıklamayı not alın. BCD nispeten basittir. Bu (vb.net) bu kadar kolay olabilir:
Private Function FromBCD(ByVal BCD As String, ByVal intsz As Integer, ByVal decsz As Integer) As Decimal
Dim PicLen As Integer = intsz + decsz
Dim result As Decimal = 0
Dim val As Integer = Asc(Mid(BCD, 1, 1))
Do While PicLen > 0
result *= 10D
result += val \ 16
PicLen -= 1
If PicLen > 0 Then
result *= 10D
result += val Mod 16
PicLen -= 1
BCD = Mid(BCD, 2)
End If
val = Asc(Mid(BCD, 1, 1))
Loop
If val Mod 16 = &HD& Then
result = -result
End If
Return result/CDec(10^decsz)
End Function
Ben bu çağrının birkaç varyasyonları ile test:
MsgBox(FromBCD("@" & Chr(13 + 16), 2, 1))
, -40,1 Ör olduğunu. Ama sadece birkaç tane. Yani hala yanlış olabilir.
Yani sonra comp-3 başlar, diyelim ki, giriş kayıt düzeni bayt 10, bu bunu çözmek olsaydı:
dim valu as Decimal = FromBCD(Mid(InputLine,10,5), 7,2))
bayt # veri-dönüşüm makalesinden formüller kaydeden göndermek ve önce ve V.
Mağaza yuvarlama hataları önlemek için bir Decimal sonuç sonrası 9 yılların # için. Evet, eğer $$$. Şamandıra & Double WILL size üzülüyor! Eğer işlemiyorsanız, bir string bile daha iyidir. Tabii
o zor olabilir. Çalıştığım yerde ana bilgisayar bayt başına 9 bittir. Ciddi. İlk 2 olasılığı bu kadar belirsiz yapan şey budur. Elbette onları gerçekten daha iyi kılan şey, sadece bir programcı olan PC'niz olabilir ve bu sizin için bir ana bilgisayar programcısı yapmak için büyük bir bahane!
Barış ... Eğer bu seçeneği vermek kadar şanslı iseniz, -Al
EBCDIC biçiminin parçası ondalık paketlenmiş mi, yoksa her ikisini de kullanmak olur bu sadece bir dosyadır? Bu biçime aşina değilim, korkarım :( –
Her ikisini de kullanan bir dosya. Baytları kaydetmek için sayıları sıkıştırmak için eski bir okul yolu: a -99999.99 4 bayt olarak saklanabilir. –
http://www.3480-3590-data-conversion.com/article-packed-fields.html –