CSharp-Assistant
دوشنبه 27 تیر 1384, 00:16 صبح
با سلام !!
من برای یک برنامه از یه الگوی فشرده سازی ساده استفاده کردم الگوی کامپرس کردن رو درست نوشتم به طوری که به درستی کارش رو انجام میده اما الگوی دیکد کردن ........ من از الگوی RLE یا Run Length Encoding استفاده کردم که در آن حروف تکرای پشت سر هم به این صورت فشرده میشه که ابتدا تعداد دفعات تکرار رشته به همراه رشته در آن نوشته میشه مثلا :
AAAAAAAAAA میشه 10A خب حالا با این تعاریف من یک متد سادهبرای انکود کردن آن بدین صورت نوشتم که به هر حال کار خودش رو درست انجام میده :
private string looped;//Dim looped() As String (Char Hayeh Tekrary!!!)
private string sh;
public string RLE(string str)
{
sh=null;
looped=str[0].ToString();
int len=str.Length;//Dim len As Integer=Len(str2)
char lastchr;//Dim lastchr As String
try
{
for(int b=1;b!=str.Length;b++)//For b=1 To Len(str2(i)
{
lastchr=str[b-1];
if(lastchr==str[b])
{
looped=looped+str[b];
}
else if(lastchr!=str[b])
{
looped+="|";
looped=looped+str[b];
}
}//End For
string[]after=looped.Split("|".ToCharArray());
for(int i=0;i!=after.Length;i++)
{
sh+=after[i].Length.ToString()+after[i].Substring(0,1);
}
//sh=sh.Replace("|","");
}
catch(System.Exception ea)
{
MessageBox.Show(ea.Message);
}
return sh;
}
الگوی دیکد رو ولی هنوز نتونستم کامل کنم البته یه چیز هایی نوشتم که فکر نکنم اصولی باشه !!! {چون کارش رو درست انجام نمیدهد} حال می خواستم در باره چگونه دیکد کردن رشته هایی که این الگو به ما بر می گرداند یه توضیح کوتاهی بدهید !!
در صورتی که مایل بودید متد دیکامپرسی که در بالا به آن اشاره کردم هم براتون می گذارم !!!
منتظر پاسخ شما هستم
من برای یک برنامه از یه الگوی فشرده سازی ساده استفاده کردم الگوی کامپرس کردن رو درست نوشتم به طوری که به درستی کارش رو انجام میده اما الگوی دیکد کردن ........ من از الگوی RLE یا Run Length Encoding استفاده کردم که در آن حروف تکرای پشت سر هم به این صورت فشرده میشه که ابتدا تعداد دفعات تکرار رشته به همراه رشته در آن نوشته میشه مثلا :
AAAAAAAAAA میشه 10A خب حالا با این تعاریف من یک متد سادهبرای انکود کردن آن بدین صورت نوشتم که به هر حال کار خودش رو درست انجام میده :
private string looped;//Dim looped() As String (Char Hayeh Tekrary!!!)
private string sh;
public string RLE(string str)
{
sh=null;
looped=str[0].ToString();
int len=str.Length;//Dim len As Integer=Len(str2)
char lastchr;//Dim lastchr As String
try
{
for(int b=1;b!=str.Length;b++)//For b=1 To Len(str2(i)
{
lastchr=str[b-1];
if(lastchr==str[b])
{
looped=looped+str[b];
}
else if(lastchr!=str[b])
{
looped+="|";
looped=looped+str[b];
}
}//End For
string[]after=looped.Split("|".ToCharArray());
for(int i=0;i!=after.Length;i++)
{
sh+=after[i].Length.ToString()+after[i].Substring(0,1);
}
//sh=sh.Replace("|","");
}
catch(System.Exception ea)
{
MessageBox.Show(ea.Message);
}
return sh;
}
الگوی دیکد رو ولی هنوز نتونستم کامل کنم البته یه چیز هایی نوشتم که فکر نکنم اصولی باشه !!! {چون کارش رو درست انجام نمیدهد} حال می خواستم در باره چگونه دیکد کردن رشته هایی که این الگو به ما بر می گرداند یه توضیح کوتاهی بدهید !!
در صورتی که مایل بودید متد دیکامپرسی که در بالا به آن اشاره کردم هم براتون می گذارم !!!
منتظر پاسخ شما هستم