kompresi file txt dengan metode run length dengan c++


teknik kompresi run length menggunakan teknik kompresi yang akan menyimpan karakter serta berapa kali berulangnya untuk karakter lebih dari satu kali, contoh:
misal kita memiliki text  yaitu                        :aaaaaaaaaaaac
maka setelah dikompresi akan menjadi        :~12ac()


cara pakai:
pertama buat sebuah file txt di dalam folder tempat script ini disimpan
isikan dalam file tersebut kalimat yang memiliki perulangan karakter misal aaaaaaaattttaaaaassss dan simpan
jalankan program ketika diminta masukkan nama file tuliskan nama file yang telah kita simpan dengan ekstensinya misal aku.txt
ketika diminta mengisikan nama file keluaran masukkan bebas ditambah ekstensi misal kucing.txt (walau file belum dibuat program akan membuat sendiri file tersebut)
buka kembali folder tempat anda jalankan program ini
buka file kucing.txt..
fuala.. maka hasil kompresi akan ada dalam file tersebut.
source codenya
//catt:saya pake ISO C++ jadi jika menggunakan compiler lama yang belum ISO silahkan hilangkan using namespace std dan tambahkan header conio serta perintah getch(); diakhir fungsi main. trima kasih
#include <iostream>
#include <string>
#include <fstream>

using namespace std;

char in[10];
char out[10];

int compress(string a,string b);
int input();
int main()
{
input();
}

int compress(string a,string b)
{
ofstream file_keluaran;
file_keluaran.open(out);
int x=49;
for(int i=0;i<a.size();i++)
{
if(a[i]==a[i+1])
{
x++;
}
else if(x==49)
{
b+=a[i];
}
else if(x>49&&x<59)
{
b=b+"~";
b+=x;
b+=a[i];
x=49;
}
else
{
b=b+"~";
int c=48;
do
{
x=x-10;
c++;
}
while(x>58);
b+=c;
b+=x;
b+=a[i];
x=49;
return 0;

}

}
file_keluaran<<b;
file_keluaran.close();
return 0;
}

int input()
{
cout<<"Masukkan nama file yang akan di kompress:";
gets(in);
cout<<"Masukkan nama file yang akan disimpan:";
gets(out);
ifstream file_masukan;
string a="";
string b="";
char c;
file_masukan.open(in);
while(file_masukan.good())
{
c=file_masukan.get();
if(file_masukan.good())
a+=c;
}
compress(a,b);
file_masukan.close();
return 0;

}

Comments