Entwickler-Ecke
Sonstiges (Delphi) - SYS(2007) Funktion aus FoxPro
FinnX - So 04.02.07 19:12
Titel: SYS(2007) Funktion aus FoxPro
hallo,
ich habe schon verschiedene sachen probiert aber bin zu noch keiner lösung gekommen:
ich benötige eine pascal-umsetzung der foxpro-funktion "sys(2007)" (prüfsummenberechnung).
soweit ich das in erfahrung gebracht müsste diese nach dem crc16-prinzip funktionieren, aber da erhalte ich in delphi-umsetzungen (quelltexte aus dem netz) andere werte.
wär schön wenn mir da jemand helfen könnte.
DiV Daniel
FinnX - Sa 17.02.07 13:47
Erstmal Danke für die Hilfe,
allerdings konnte ich mein Problem so nicht lösen. Die FoxPro Version die ich habe, nutzt laut Microsoft (siehe Link von mkinzler) CRC16.
Mit allen Delphi-Umsetzungen komme ich allerdings auf andere Werte.
Als Beispiel:
Der (FoxPro)Befehl
SYS(2007,'15551') liefert die Prüfsumme 54616 und
über die CRC-Funktion von
umni [
http://www.umnicom.de/Software/Delphi/Utilities/Utilities.html] bzw. das
Programm [
http://www.efg2.com/Lab/Mathematics/CRCCLX.zip] von
efg [
http://www.efg2.com/Lab/Mathematics/CRC.htm] komme ich auf andere Werte.
Ich weiß nicht ob ich hier irgendwas übersehe, aber ich glaube foxpro hat für Zeichenausdrücke andere Bitfolgen als Delphi was unterschiedliche Prüfsummen wahrscheinlich macht.
Wäre schön wenn sich nochmal jemand der Sache annehmen könnte.
DiV Daniel
Delete - Sa 17.02.07 18:00
für was brauchst du denn die prüfziffern wie foxpro?
wenn du die alten daten verwenden willst und die logik zukünftig mit delphi abbilden willst, dann schmeiss doch das alte raus und implementier 'n neuen algo. für die übergangszeit kannst ja noch die alten werte zwischenspeichern und mit den benutzereingaben vergleichen.
wär das eine lösung?
FinnX - Mo 19.02.07 20:09
Das hilft mir leider auch nicht weiter.
Mein Ziel ist folgendes:
Ein Bekannter nutzt im Mehrplatzbetrieb ein System das er gern seinen Wünschen angepasst haben möchte (aus Lizenz- und Kostengründen soll es ein neues Programm sein). Nun nutzt dieses Programm in seiner Datenbank die Prüfsumme aus allen Einträgen eines Datensatzes zum Vergleich der Korrektheit. (Warum das so ist weiss ich nicht, da ein Datensatz in Bearbeitung für andere Nutzer sowieso gesperrt ist)
Ich war schon froh herauszukriegen wie die Prüfsumme gebildet wird, da ich mich in FoxPro nicht wirklich auskenne.
Mein Bekannter und ich waren uns einig, dass neue Programm schrittweise einzuführen um einen reibungslosen Betrieb zu gewährleisten. Mit den Datenbanken komme ich gut zurecht aber wenn ich über das neue Programm einen Datensatz einfüge bekommt man im alten Programm eine Fehlermeldung dass der Datensatz fehlerhaft sei.
Ich habe schon von aussen Datensätze eingefügt von denen ich erst per Hand über FoxPro die Prüfsumme ermittelt habe. Da funktionierte es.
Wäre wirklich prima wenn ich Hilfe bekäme und die ganze Arbeit wegen dieser Hürde nicht umsonst wäre.
mkmk - Fr 18.07.08 15:56
Ist zwar ein ziemlich alter Beitrag, aber waere froh gewesen, wenn ich diesen Code auf dem Tablet praesentiert bekommen haette. Naja, vielleicht kann's ein anderer brauchen.
Und bitte nicht lachen: ich bin erst seit 2 Wochen im Lande Delphi.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47:
| procedure mystep( c : char); var data : BYTE; begin data := ORD(c); crc_value := swap(crc_value); crc_value := crc_value Xor data; crc_value := crc_value Xor (lo(crc_value) shr 4); crc_value := crc_value Xor ((crc_value shl 8) shl 4); crc_value := crc_value Xor ((lo(crc_value) shl 4) shl 1); end;
function Crc16_String (s: String ): Word; var i: Integer; begin crc_value := $FFFF; for i := 1 to Length(s) do mystep(s[i]); result := crc_value; end;
function Crc16_Array (s: Pointer; cnt: integer): Word; var i: Integer; begin crc_value := $FFFF; for i := 0 to cnt -1 do mystep( PChar(LongWord(s) + i)^);
result := crc_value; end; |
Das Resultat entspricht 1:1 dem Sys(2007) von Visual FoxPro.
Moderiert von
Christian S.: Code- durch Delphi-Tags ersetzt
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!