Wysłano: Środa, 28 Grudnia 2005, 17:35 |
|
|
|
Mam do napisania zadanie z C++ na zaliczenie... i jestem troche ciemny z C++ jezeli o to chodzi... oto tresc zadania:
ZADANIE 32 : |
Napisz program do konwertowania plikow tekstowych z uwzglednieniem roznych standardow polskich liter. Nalezy uwzglednic wszystkie mozliwe standardy kodowania. Program powinien tworzyc nowy plik pozostawiajac pierwotny plik wejsciowy bez zmian.
|
Zaczalem to powoli pisac i oto co mi wyszlo... nic ciekawego w sumie... mogl by mi ktos pomoc to popoprawiac? bo ja sobie z tym nie poradze :(
zad32.cpp : |
#include <iostream>
using namespace std;
#include <conio.h>
unsigned short int ad,cd,ed,ld,nd,sd,od,xd,zd,a,c,e,l,n,s,o,x,z;
int main()
{
unsigned short int menu;
cout<<"1 - ISO-8859-2\n";
cout<<"2 - Windows-EE\n";
cout<<"3 - IBM (CP852)\n";
cout<<"4 - Mazovia\n";
cout<<"5 - CSK\n";
cout<<"6 - Cyfromat\n";
cout<<"7 - DHN\n";
cout<<"8 - IINTE-ISIS\n";
cout<<"9 - IEA-Swierk\n";
cout<<"10 - Logic\n";
cout<<"11 - Microvex\n";
cout<<"12 - Ventura\n";
cout<<"13 - ELWRO-Junior\n";
cout<<"14 - Mac\n";
cout<<"15 - AmigaPL\n";
cout<<"16 - TeXPL\n";
cout<<"17 - Atari-Calamus\n";
cout<<"18 - CorelDraw!\n";
cout<<"19 - ATM\n\n";
cout<<"Wybierz kodowanie : ";
cin>>menu;
switch(menu){
case 1:
ad=161;cd=198;ed=202;ld=163;nd=209;od=211;sd=166;xd=172;zd=175;
a=177;c=230;e=234;l=179;n=241;o=243;s=182;x=188;z=191;
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 7:
break;
case 8:
break;
case 9:
break;
case 10:
break;
case 11:
break;
case 12:
break;
case 13:
break;
case 14:
break;
case 15:
break;
case 16:
break;
case 17:
break;
case 18:
break;
case 19:
break;
default:
cout<<"!!! Brak takiej pozycji do wyboru !!!\n";
break;
return 1;
}
FILE *plik;
int ch;
filename;
cout << "Podaj sciezke do pliku" << endl;
cin >> filename;
plik = fopen(filename,"rw"); /* otworzenie pliku w trybie odczyt/zapis */
while ((ch = getc(plik)) != EOF) /* pętla powtarzana do końca aż program */
/* przeskanuje cały plik */
{
if ((ch == 165) || (ch == 198) || (ch == 202) || (ch == 163) || (ch == 209) || (ch == 211) || (ch == 140) || (ch == 143) || (ch == 175) || (ch == 185) || (ch == 230) || (ch == 234) || (ch == 179) || (ch == 241) || (ch == 243) || (ch == 156) || (ch == 159) || (ch == 191))
{
switch(ch) /* zamiana któregoś ze znaków */
{
case (165):
ch=ad;
break;
case(198):
ch=cd;
break;
case(202):
ch=ed;
break;
case(163):
ch=ld;
break;
case(209):
ch=nd;
break;
case(211):
ch=od;
break;
case(140):
ch=sd;
break;
case(143):
ch=xd;
break;
case(175):
ch=zd;
break;
case(185):
ch=a;
break;
case(230):
ch=c;
break;
case(234):
ch=e;
break;
case(179):
ch=l;
break;
case(241):
ch=n;
break;
case(243):
ch=o;
break;
case(156):
ch=s;
break;
case(159):
ch=x;
break;
case(191):
ch=z;
break;
}
fseek(plik,-1,1); /* przesunięcie wskaźnika pliku */
putc(ch,plik); /* podmiana znaku */
fseek(plik,ftell(plik),0); /* przesunięcie wskaźnika pliku */
}
}
fclose(plik); /* zamknięcie pliku */
getch();
}
|
|
|
|
|
|
|
|
|
Wysłano: Czwartek, 12 Stycznia 2006, 18:20 |
|
|
|
nie napisales w jakim kodowaniu jest plik wejsciowy. Ja je nazwalem "domyslne".. Program mozna latwo przerobic, zeby zmienial z dowolnego kodowania na dowolne.
Nastepnym razem umiesc w temacie jaki program to ma byc.
Kod: |
#include <iostream>
#define liter_pl 18
using namespace std;
typedef struct kody{
char nazwa[100];
char znaki[liter_pl];
}KODY;
KODY standardy[]={
// w domyslnym kodowaniu sa pliki wejsciowe
{"domyslne" ,{165,198,202,163,209,211,140,143,175,185,230,234,179,241,2 43,156,159,191}},
// nazwa , A , C , E , L , N , O , S , X , Z , a , c , e , l , n , o , s , x , z
// ------------ tu dodajemy standardy --------------
{"ISO-8859-2" ,{161,198,202,163,209,211,166,172,175,177,230,234,179,241,2 43,182,188,191}},
{"Windows-EE" ,{111,111,111,111,111,111,111,111,111,111,111,111,111,111,1 11,111,111,111}},
{"IBM (CP852)" ,{111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111 ,111,111}},
// ------------ tu dodajemy standardy --------------
{"",{}}};
int main(){
int wybor,i;
for(i=0; ; i++){
if(standardy[i].nazwa[0]==0)
break;
}
int standardow=i;
jeszcze_raz:
cout << "Wybierz standard:\n";
for(i=1;i<standardow;i++){
cout << i << ". " << standardy[i].nazwa << endl;
}
cout << ": ";
cin>>wybor;
if(wybor<=0 || wybor>=standardow){
cout<<"Brak takiej pozycji do wyboru. Sprobuj jeszcze raz...\n\n";
goto jeszcze_raz;
}
FILE *input, *output;
char filename[100];
char znak;
cout << "Podaj sciezke do pliku od odczytu: ";
cin >> filename;
input = fopen(filename,"r"); /* otworzenie pliku w trybie odczyt */
cout << "Podaj sciezke do pliku od zapisu: ";
cin >> filename;
output = fopen(filename,"w"); /* otworzenie pliku w trybie zapis */
while ((znak = getc(input)) != EOF){
for(i=0;i<liter_pl;i++){
if(znak == standardy[0].znaki[i]){
znak=standardy[wybor].znaki[i];
break;
}
}
putc(znak,output); /* wstawienie znaku */
}
fclose(input); /* zamknięcie pliku */
fclose(output); /* zamknięcie pliku */
cout << "Koniec programu. <enter>\n";
getchar();getchar();
} |
Teraz zuwazylem, ze linie sa lamane i te linie gdzie wpisujesz znaki dziwnie wygladaja... jesli w edytorze usuniesz tam lamanie lini to bedzie ok. |
|
|
|
|
|
|
|
Kopiowanie i rozpowszechnianie materiałów w całości lub części jest niedozwolone. Wszelkie informacje zawarte w tym miejscu są chronione prawem autorskim.
|