Simple chaîne de compression


Une simple routine pour compresser des chaînes de caractères.

Contributeur: SWAG ÉQUIPE de SUPPORT

{Vous n' & #39 t obtenir ce genre de compression de mes routines, mais ici
ils sont de toute façon. Lors de l'essai, vous & #39 ll obtenir une meilleure compression si vous
l'utilisation de l'anglais et de longues Chaînes de caractères.
}
Unité de Compresser

Interface

Const
CompressedStringArraySize = 500 { err sur le côté de la générosité }

Type
tCompressedStringArray = Array[1..CompressedStringArraySize] of Byte

la Fonction GetCompressedString(Arr : tCompressedStringArray) : String

Procédure CompressString(st : String Var Arr : tCompressedStringArray
Var len : Entier)
{ convertit st dans un tCompressedStringArray de longueur len }

la mise en Œuvre

Const
FreqChar : Array[4..14] de Char = & #39 etaonirshdl & #39
{ peut & #39 t dans [0..3] en raison de deux vide bits signifier un espace }

la Fonction GetCompressedString(Arr : tCompressedStringArray) : String
Var
Maj : Octet
i : Integer
ch : Char
st : String
b : Byte

la Fonction GetHalfNibble : Octet
begin
GetHalfNibble := (Arr[i] shr Maj) et 3
si la touche Maj = 0 then begin
Maj := 6
inc(i)
d'autre fin dec(Maj,2)
fin

begin
st := & #39 & #39
i := 1
Maj := 6
Repeat
b := GetHalfNibble
si b = 0 alors
ch := & #39 & #39
else begin
b := (b shl 2) ou GetHalfNibble
si b = $F puis commencer
b := GetHalfNibble shl 6
b := b ou GetHalfNibble shl 4
b := b ou GetHalfNibble shl 2
b := b ou GetHalfNibble
ch := Char(b)
else
ch := FreqChar[b]
fin
si ch <> #0 puis st := st ch
Jusqu'à ce que ch = #0
GetCompressedString := st
fin

Procédure CompressString(st : String Var Arr : tCompressedStringArray
Var len : Entier)
{ convertit st dans un tCompressedStringArray de longueur len }
Var
i : Integer
Maj : Octet

Procédure OutHalfNibble b : Byte)
begin
Arr[len] := Arr[len] ou (b shl Maj)
si la touche Maj = 0 then begin
Maj := 6
inc(len)
d'autre fin dec(Maj,2)
fin

Procédure OutChar(ch : Char)
Var
j' : Octet
bych : Octet Absolue ch
begin
si ch = & #39 & #39
OutHalfNibble(0)
else begin
i := 4
While (i & lt; 15) et (FreqChar[i]<>ch) ne inc(i)
OutHalfNibble(i shr 2)
OutHalfNibble(i et 3)
si i = $F puis commencer
OutHalfNibble(bych shr 6)
OutHalfNibble((bych shr 4) et 3)
OutHalfNibble((bych shr 2) et 3)
OutHalfNibble(bych et 3)
fin
fin
fin

begin
len := 1
Maj := 6
fillChar(Arr,sizeof(Arr),0)
For i := 1 to length(st) ne OutChar(st[i])
OutChar(#0) { fin de comprimé de Chaîne signalé par #0 }
si la touche Maj = 6
ensuite, dec(len)
fin

à la fin.









Simple chaîne de compression


Simple chaîne de compression : Plusieurs milliers de conseils pour vous faciliter la vie.


Une simple routine pour compresser des chaînes de caracteres.

Contributeur: SWAG EQUIPE de SUPPORT

{Vous n' & #39 t obtenir ce genre de compression de mes routines, mais ici
ils sont de toute façon. Lors de l'essai, vous & #39 ll obtenir une meilleure compression si vous
l'utilisation de l'anglais et de longues Chaînes de caracteres.
}
Unite de Compresser

Interface

Const
CompressedStringArraySize = 500 { err sur le cote de la generosite }

Type
tCompressedStringArray = Array[1..CompressedStringArraySize] of Byte

la Fonction GetCompressedString(Arr : tCompressedStringArray) : String

Procedure CompressString(st : String Var Arr : tCompressedStringArray
Var len : Entier)
{ convertit st dans un tCompressedStringArray de longueur len }

la mise en Œuvre

Const
FreqChar : Array[4..14] de Char = & #39 etaonirshdl & #39
{ peut & #39 t dans [0..3] en raison de deux vide bits signifier un espace }

la Fonction GetCompressedString(Arr : tCompressedStringArray) : String
Var
Maj : Octet
i : Integer
ch : Char
st : String
b : Byte

la Fonction GetHalfNibble : Octet
begin
GetHalfNibble := (Arr[i] shr Maj) et 3
si la touche Maj = 0 then begin
Maj := 6
inc(i)
d'autre fin dec(Maj,2)
fin

begin
st := & #39 & #39
i := 1
Maj := 6
Repeat
b := GetHalfNibble
si b = 0 alors
ch := & #39 & #39
else begin
b := (b shl 2) ou GetHalfNibble
si b = $F puis commencer
b := GetHalfNibble shl 6
b := b ou GetHalfNibble shl 4
b := b ou GetHalfNibble shl 2
b := b ou GetHalfNibble
ch := Char(b)
else
ch := FreqChar[b]
fin
si ch <> #0 puis st := st ch
Jusqu'a ce que ch = #0
GetCompressedString := st
fin

Procedure CompressString(st : String Var Arr : tCompressedStringArray
Var len : Entier)
{ convertit st dans un tCompressedStringArray de longueur len }
Var
i : Integer
Maj : Octet

Procedure OutHalfNibble b : Byte)
begin
Arr[len] := Arr[len] ou (b shl Maj)
si la touche Maj = 0 then begin
Maj := 6
inc(len)
d'autre fin dec(Maj,2)
fin

Procedure OutChar(ch : Char)
Var
j' : Octet
bych : Octet Absolue ch
begin
si ch = & #39 & #39
OutHalfNibble(0)
else begin
i := 4
While (i & lt; 15) et (FreqChar[i]<>ch) ne inc(i)
OutHalfNibble(i shr 2)
OutHalfNibble(i et 3)
si i = $F puis commencer
OutHalfNibble(bych shr 6)
OutHalfNibble((bych shr 4) et 3)
OutHalfNibble((bych shr 2) et 3)
OutHalfNibble(bych et 3)
fin
fin
fin

begin
len := 1
Maj := 6
fillChar(Arr,sizeof(Arr),0)
For i := 1 to length(st) ne OutChar(st[i])
OutChar(#0) { fin de comprime de Chaîne signale par #0 }
si la touche Maj = 6
ensuite, dec(len)
fin

a la fin.


Simple chaîne de compression

Simple chaîne de compression : Plusieurs milliers de conseils pour vous faciliter la vie.
Recommander aux amis
  • gplus
  • pinterest

Messages récents

Commentaire

Laisser un commentaire

évaluation