Edultra 13 Denunciar post Postado Novembro 9, 2008 Bem pessoal mais um trabalhinho que tive que fazer na faculdade, bem foi algo para testar o modo de leitura de arquivos e manipulação utilizando vetores, vamos explicar um pouco sobre o que se trata o Compactador de Arquivos: JUSTIFICATIVA A compressão de dados é muito utilizada no meio digital, principalmente em se tratando de aplicações multimídia. O que torna um arquivo de música de mais de 40MB reduzido a 10% deste tamanho? Como é possível armazenar mais de 8 horas de vídeo em um disco de 17GB? Isso tudo deve-se à compressão digital. Graças a ela encontramos os famosos formatos de arquivo JPG, MP3, MPEG, DivX, sem os quais antes era praticamente impossível a transmissão multimídia via Internet ou outro meio de comunicação digital. OBJETIVOS O objetivo geral deste trabalho é aproximar o aluno de Programação de um segmento de grande atuação em sua profissão – a compressão de sinais – para que possa colocar em prática o conhecimento adquirido em sala de aula. Os objetivos específicos: - Uso de vetores - Uso de arquivos - Manipulação de strings - Uso de funções O PROBLEMA Para solução integral do trabalho, o aluno deverá seguir algumas premissas: Criação de variáveis globais: arqorigem – arquivo de origem arqdestino – arquivo de destino vet – vetor auxiliar para compressão/descompressão Criação das funções: main() A função principal irá solicitar os nomes de arquivo de origem e destino. O usuário irá escolher se o processo é de compressão ou descompressão. O usuário deverá ter a opção de mostrar o conteúdo do arquivo de origem ou destino. Esta opção é passada como parâmetro para a função mostraarquivo(). learquivo(...) Esta função irá fazer a leitura do arquivo de origem e armazená-lo em um vetor. A função learquivo será utilizada tanto para compressão quanto para descompressão. comprime(...) Esta função irá aplicar dois algoritmos de compressão: Huffmann e Run-Length (RLE). À medida em que os dados vão sendo lidos do vetor e comprimidos, estes são gravados no arquivo de destino. descomprime(...) Esta função irá aplicar a descompressão utilizando os dois algoritmos: Huffmann e Run-Length (RLE). À medida em que os dados vão sendo lidos do vetor e descomprimidos, estes são gravados no arquivo de destino. mostraarquivo(op) Esta função irá apresentar o conteúdo do arquivo escolhido conforme o parâmetro op: ‘O’ para Origem e ‘D’ para Destino. OS ALGORITMOS Run-Length (RLE) O algoritmo RLE utiliza-se da repetição de um mesmo caractere para compressão. Por exemplo: A seqüência de caracteres: “AAAAAABCDEFFFFGHIJJJJJJJJJJKLMNOPQQQQQQQQQQQQQRSTUVWXYYYYYYZZZZ” Seria representada da seguinte maneira: “A6BCDEF4GHIJ10KLMNOPQ13RSTUVWXY6Z4” Pois eu informo a letra e em seguida o número de vezes que ela é repetida. Esta técnica é mais utilizada na compressão de imagens e vídeo. Como fazer para comprimir dados numéricos? Huffmann O algoritmo de Huffmann baseia-se no uso de “apelidos” para seqüência de caracteres mais freqüentes. Aqui será utilizada uma versão simplificada do algoritmo. Por exemplo: ao ler um arquivo de texto, vou apelidar a seqüência “ão” de “|”. Aplicando-se este apelido à seguinte frase: “A função de compressão é muito útil para transmissão de dados: comunicação digital” Obtemos o seguinte resultado: “A funç| de compress| é muito útil para transmiss| de dados: comunicaç| digital” Desta maneira eu consegui suprimir 4 (quatro) caracteres (bytes) do meu arquivo, tornando-o menor. Para descomprimir, basta substituir novamente o apelido “|” por “ão”. Para este trabalho, utilize 10 apelidos para 10 seqüências diferentes (de livre escolha). Permita cadastrar mais apelidos para ganhar nota extra. O Código: /******************************************************************************* Sistema Para compactacao de arquivos utilizando os metodos hufmann e Runlenght Analista - Eduardo de Souza Desenvolvedor - Eduardo de Souza Data Desenvolvimento: 06/11/2008 23:00 Data última Alteração: DD/MM/AAAA HH:MM Entregue protocolo 11 *******************************************************************************/ #include <iostream> #include <conio.h> #include <fstream> #include <string> using namespace std; void learquivo(char *vet,char arqorigem[20]) { fstream arqB; arqB.open(arqorigem,ios::in); char n[70]; int i=0; while(!arqB.eof()) { arqB.read(n,1); n[1]=0; if(!arqB.eof()) { vet[i]=n[0]; i++; } } vet[i]=0; cout.flush(); arqB.close(); } void comprime(char *vet, int tam) { int i; for(i=0;i<tam;i++) { if(vet[i]==vet[i+1]&&vet[i]==vet[i+2]) { int j,q,t; j=i+2; q=2; t=0; vet[i+1]='¬'; while(vet[i]==vet[j]&&t!=10) { vet[j]='¬'; j++; if(q<10) { q++; } if(q>=10&&t<10) { t++; } } if(q<10) { if(q==3) { vet[i+1]='©'; vet[i+2]=q+48; } if(q==4) { vet[i+1]='©'; vet[i+2]=q+48; } if(q==5) { vet[i+1]='©'; vet[i+2]=q+48; } if(q==6) { vet[i+1]='©'; vet[i+2]=q+48; } if(q==7) { vet[i+1]='©'; vet[i+2]=q+48; } if(q==8) { vet[i+1]='©'; vet[i+2]=q+48; } if(q==9) { vet[i+1]='©'; vet[i+2]=q+48; } } else if(q>=10&&q<100) { vet[i+1]='æ'; vet[i+2]=t+47; } i+=t+q-1; } else if(vet[i]=='a'&&vet[i+1]=='s')//as { vet[i]='¦'; vet[i+1]='¬'; } else if(vet[i]=='e'&&vet[i+1]=='s')//es { vet[i]='¨'; vet[i+1]='¬'; } else if(vet[i]=='o'&&vet[i+1]=='s')//os { vet[i]='®'; vet[i+1]='¬'; } else if(vet[i]=='u'&&vet[i+1]=='s')//us { vet[i]='«'; vet[i+1]='¬'; } else if(vet[i]=='ã'&&vet[i+1]=='o')//ão { vet[i]='Ä'; vet[i+1]='¬'; } else if(vet[i]=='e'&&vet[i+1]=='m')//em { vet[i]='~'; vet[i+1]='¬'; } else if(vet[i]=='n'&&vet[i+1]=='o')//no { vet[i]='^'; vet[i+1]='¬'; } else if(vet[i]=='n'&&vet[i+1]=='a')//na { vet[i]='¿'; vet[i+1]='¬'; } else if(vet[i]=='a'&&vet[i+1]=='m')//am { vet[i]='´'; vet[i+1]='¬'; } else if(vet[i]=='p'&&vet[i+1]=='a')//pa { vet[i]='_'; vet[i+1]='¬'; } else if(vet[i]=='r'&&vet[i+1]=='a')//ra { vet[i]='ª'; vet[i+1]='¬'; } else if(vet[i]=='d'&&vet[i+1]=='a')//da { vet[i]='ƒ'; vet[i+1]='¬'; } else if(vet[i]=='d'&&vet[i+1]=='e')//de { vet[i]='`'; vet[i+1]='¬'; } else if(vet[i]=='d'&&vet[i+1]=='o')//do { vet[i]='§'; vet[i+1]='¬'; } else if(vet[i]=='q'&&vet[i+1]=='u'&&vet[i+2]=='e')//que { vet[i]='1'; vet[i+1]='a'; vet[i+2]='¬'; } else if(vet[i]=='m'&&vet[i+1]=='e'&&vet[i+2]=='n')//men { vet[i]='1'; vet[i+1]='b'; vet[i+2]='¬'; } else if(vet[i]=='c'&&vet[i+1]=='o'&&vet[i+2]=='m')//com { vet[i]='1'; vet[i+1]='c'; vet[i+2]='¬'; } else if(vet[i]=='i'&&vet[i+1]=='n'&&vet[i+2]=='f')//inf { vet[i]='1'; vet[i+1]='d'; vet[i+2]='¬'; } else if(vet[i]=='p'&&vet[i+1]=='o'&&vet[i+2]=='r')//por { vet[i]='1'; vet[i+1]='e'; vet[i+2]='¬'; } else if(vet[i]=='c'&&vet[i+1]=='a'&&vet[i+2]=='n')//can { vet[i]='1'; vet[i+1]='f'; vet[i+2]='¬'; } else if(vet[i]==' '&&vet[i+1]=='o'&&vet[i+2]=='u')// o { vet[i]='1'; vet[i+1]='g'; vet[i+2]='¬'; } else if(vet[i]=='u'&&vet[i+1]=='m'&&vet[i+2]=='a')//uma { vet[i]='1'; vet[i+1]='h'; vet[i+2]='¬'; } else if(vet[i]==' '&&vet[i+1]=='e'&&vet[i+2]==' ')// e { vet[i]='&'; vet[i+1]='¿'; vet[i+2]='¬'; } else if(vet[i]==' '&&vet[i+1]=='a'&&vet[i+2]==' ')// a { vet[i]='&'; vet[i+1]='-'; vet[i+2]='¬'; } } cout<<"\nConversão Concluida\n"; } int calculavetB(char *vet,int tam) { int i,tamanhob=0; for(i=0;i<tam;i++) { if(vet[i+1]=='©') { tamanhob+=vet[i+2]-48; } else if(vet[i+1]=='æ') { tamanhob+=10; tamanhob+=vet[i+2]-48; } else if(vet[i]=='¦') { tamanhob+=2; } else if(vet[i]=='¨') { tamanhob+=2; } else if(vet[i]=='®') { tamanhob+=2; } else if(vet[i]=='«') { tamanhob+=2; } else if(vet[i]=='Ä') { tamanhob+=2; } else if(vet[i]=='~') { tamanhob+=2; } else if(vet[i]=='^') { tamanhob+=2; } else if(vet[i]=='¿') { tamanhob+=2; } else if(vet[i]=='´') { tamanhob+=2; } else if(vet[i]=='_') { tamanhob+=2; } else if(vet[i]=='ª') { tamanhob+=2; } else if(vet[i]=='ƒ') { tamanhob+=2; } else if(vet[i]=='`') { tamanhob+=2; } else if(vet[i]=='§') { tamanhob+=2; } else if(vet[i]=='1'&&vet[i+1]=='a') { tamanhob+=3; i++; } else if(vet[i]=='1'&&vet[i+1]=='b') { tamanhob+=3; i++; } else if(vet[i]=='1'&&vet[i+1]=='c') { tamanhob+=3; i++; } else if(vet[i]=='1'&&vet[i+1]=='d') { tamanhob+=3; i++; } else if(vet[i]=='1'&&vet[i+1]=='e') { tamanhob+=3; i++; } else if(vet[i]=='1'&&vet[i+1]=='f') { tamanhob+=3; i++; } else if(vet[i]=='1'&&vet[i+1]=='g') { tamanhob+=3; i++; } else if(vet[i]=='1'&&vet[i+1]=='h') { tamanhob+=3; i++; } else if(vet[i]=='&'&&vet[i+1]=='¿') { tamanhob+=3; i++; } else if(vet[i]=='&'&&vet[i+1]=='-') { tamanhob+=3; i++; } else tamanhob++; } return tamanhob; } void armazena(char *vet, int tam,char arqdestino[20]) { int i=0,k; k=(tam/100)*3; ofstream arq; arq.open(arqdestino, ios::out); for(int i=0; i<tam; i++) { if(vet[i]!='¬') arq << vet[i]; if(i==k||i==k*1||i==k*2||i==k*3||i==k*4||i==k*5||i==k*6||i==k*7||i==k*8||i==k*9 ||i==k*10) printf("%c",178); } arq.close(); } void converte(char *vet, char *vetdesc, int tam) { int i,j=0,l,k,cont; for(i=0;i<tam;i++) { cont=0; if(vet[i+1]=='©') { cont=vet[i+2]-48; cont+=-1; vet[i+1]='¬'; vet[i+2]='¬'; while(cont>0) { vetdesc[j]=vet[i]; j++; cont--; } } else if(vet[i+1]=='æ') { cont=vet[i+2]-48; vet[i+1]='¬'; vet[i+2]='¬'; cont+=9; while(cont>0) { vetdesc[j]=vet[i]; j++; cont--; } } if(vet[i]=='¦') { vetdesc[j]='a'; vetdesc[j+1]='s'; j+=2; } else if(vet[i]=='¨') { vetdesc[j]='e'; vetdesc[j+1]='s'; j+=2; } else if(vet[i]=='®') { vetdesc[j]='o'; vetdesc[j+1]='s'; j+=2; } else if(vet[i]=='«') { vetdesc[j]='u'; vetdesc[j+1]='s'; j+=2; } else if(vet[i]=='Ä') { vetdesc[j]='ã'; vetdesc[j+1]='o'; j+=2; } else if(vet[i]=='~') { vetdesc[j]='e'; vetdesc[j+1]='m'; j+=2; } else if(vet[i]=='^') { vetdesc[j]='n'; vetdesc[j+1]='o'; j+=2; } else if(vet[i]=='¿') { vetdesc[j]='n'; vetdesc[j+1]='a'; j+=2; } else if(vet[i]=='´') { vetdesc[j]='a'; vetdesc[j+1]='m'; j+=2; } else if(vet[i]=='_') { vetdesc[j]='p'; vetdesc[j+1]='a'; j+=2; } else if(vet[i]=='ª') { vetdesc[j]='r'; vetdesc[j+1]='a'; j+=2; } else if(vet[i]=='ƒ') { vetdesc[j]='d'; vetdesc[j+1]='a'; j+=2; } else if(vet[i]=='`') { vetdesc[j]='d'; vetdesc[j+1]='e'; j+=2; } else if(vet[i]=='§') { vetdesc[j]='d'; vetdesc[j+1]='o'; j+=2; } else if(vet[i]=='1'&&vet[i+1]=='a') { vetdesc[j]='q'; vetdesc[j+1]='u'; vetdesc[j+2]='e'; j+=3; i++; } else if(vet[i]=='1'&&vet[i+1]=='b') { vetdesc[j]='m'; vetdesc[j+1]='e'; vetdesc[j+2]='n'; j+=3; i++; } else if(vet[i]=='1'&&vet[i+1]=='c') { vetdesc[j]='c'; vetdesc[j+1]='o'; vetdesc[j+2]='m'; j+=3; i++; } else if(vet[i]=='1'&&vet[i+1]=='d') { vetdesc[j]='i'; vetdesc[j+1]='n'; vetdesc[j+2]='f'; j+=3; i++; } else if(vet[i]=='1'&&vet[i+1]=='e') { vetdesc[j]='p'; vetdesc[j+1]='o'; vetdesc[j+2]='r'; j+=3; i++; } else if(vet[i]=='1'&&vet[i+1]=='f') { vetdesc[j]='c'; vetdesc[j+1]='a'; vetdesc[j+2]='n'; j+=3; i++; } else if(vet[i]=='1'&&vet[i+1]=='g') { vetdesc[j]=' '; vetdesc[j+1]='o'; vetdesc[j+2]='u'; j+=3; i++; } else if(vet[i]=='1'&&vet[i+1]=='h') { vetdesc[j]='u'; vetdesc[j+1]='m'; vetdesc[j+2]='a'; j+=3; i++; } else if(vet[i]=='&'&&vet[i+1]=='¿') { vetdesc[j]=' '; vetdesc[j+1]='e'; vetdesc[j+2]=' '; j+=3; i++; } else if(vet[i]=='&'&&vet[i+1]=='-') { vetdesc[j]=' '; vetdesc[j+1]='a'; vetdesc[j+2]=' '; j+=3; i++; } else { vetdesc[j]=vet[i]; j++; } } } void mostraarquivo(char op,char arqorigem[20],char arqdestino[20]) { char mostrar[20]; if(op=='O'||op=='o') { fstream arqc; arqc.open(arqorigem,ios::in); char n[70]; while(!arqc.eof()) { arqc.read(n,1); n[1]=0; if(!arqc.eof()) { cout<<n[0]; } } cout.flush(); arqc.close(); } else { fstream arqd; arqd.open(arqdestino,ios::in); char n[70]; while(!arqd.eof()) { arqd.read(n,1); n[1]=0; if(!arqd.eof()) { cout<<n[0]; } } cout.flush(); arqd.close(); } cout<<"\nPrecione uma tecla para voltar ao menu principal"<<endl; getch(); system("cls"); } int main() { int opcao=0,quantcomp; char arqorigem[20],arqdestino[20]; arqorigem[0]='*'; arqdestino[0]='*'; while(opcao!=5){ cout<<"\t\tÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»"<<endl; cout<<"\t\tº"<<"\tBem vindo ao Gerds Compressor º"<<endl; cout<<"\t\tº"<<"\tEscolha uma das Opções: º"<<endl; cout<<"\t\tº"<<"\t1 - Compactar Arquivo º"<<endl; cout<<"\t\tº"<<"\t2 - Descompactar Arquivo º"<<endl; cout<<"\t\tº"<<"\t3 - Cadastrar Apelidos º"<<endl; cout<<"\t\tº"<<"\t4 - Ver Arquivo º"<<endl; cout<<"\t\tº"<<"\t5 - Sair º"<<endl; cout<<"\t\tÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ"<<endl;//172 cin>>opcao; if(opcao==1) { cout<<"Digite o nome do arquivo a ser compactado: \n(O arquivo deve estar na mesma pasta que o descompactador)"<<endl; cin>>arqorigem; cout<<"Digite o nome do arquivo a ser gerado"<<endl; cin>>arqdestino; fstream arqA; arqA.open(arqorigem, ios::in); char n[70]; int i=0; while(!arqA.eof()) { arqA.read(n,1); n[1]=0; if(!arqA.eof()) { i++; } } cout.flush(); arqA.close(); cout<<"Caracteres encontrados no arquivo "<<arqorigem<<" :"<<i<<endl; char *vet; vet=(char *)malloc(i*sizeof(int)); learquivo(vet,arqorigem); comprime(vet,i); cout<<"\nIniciando Compactação\n"; armazena(vet,i,arqdestino); cout<<"\nDocumento Compactado\n"; fstream arq2; arq2.open(arqdestino, ios::in); int q=0; char b[70]; while(!arq2.eof()) { arq2.read(b,1); b[1]=0; if(!arq2.eof()) { q++; } } cout.flush(); arq2.close(); cout<<"Caracteres no "<< arqdestino<<" compactado: "<<q<<endl; cout<<"Pressione uma tecla para voltar ao menu principal"<<endl; getch(); opcao=0; system("cls"); } else if(opcao==2) { cout<<"Digite o nome do arqorigem a ser descompactado"<<endl; cin>>arqorigem; cout<<"Digite o nome do arqorigem a ser gerado"<<endl; cin>>arqdestino; fstream arqdes; arqdes.open(arqorigem, ios::in); char n[70]; int i=0; while(!arqdes.eof()) { arqdes.read(n,1); n[1]=0; if(!arqdes.eof()) { i++; } } cout.flush(); arqdes.close(); cout<<"O arquivo: " <<arqorigem<<" a ser descompactado possui "<<i<<" caracteres"<<endl; char *vet; vet=(char *)malloc(i*sizeof(int)); learquivo(vet,arqorigem); int j; j=calculavetB(vet,i); cout<<"\nO arquivo: "<<arqdestino<<" terá "<<j<<" caracteres\n"; char *vetdesc; vetdesc=(char *)malloc(j*sizeof(int)); converte(vet,vetdesc,j); armazena(vetdesc,j,arqdestino); cout<<"\nDocumento Descompactado\n"; cout<<"Pressione uma tecla para voltar ao menu principal"<<endl; getch(); opcao=0; system("cls"); } else if(opcao==3) { } else if(opcao==4) { char op; op='A'; while(op!='o'&&op!='d'&&op!='O'&&op!='D') { cout<<"Digite O para origem e D para destino"<<endl; op=getch(); if(arqorigem[0]=='*'&&(op=='o'||op=='O')) { cout<<"Arquivo origem nao digitado anteriormente"<<endl; cout<<"Digite o Nome do arquivo"<<endl; cin>>arqorigem; } if(arqdestino[0]=='*'&&(op=='d'||op=='D')) { cout<<"Arquivo Destino nao digitado anteriormente"<<endl; cout<<"Digite o Nome do arquivo"<<endl; cin>>arqdestino; } } mostraarquivo(op,arqorigem,arqdestino); } } } } OBS: Este compactador terá objetivo apenas para o estudo dos métodos existentes de compressão, portanto neste caso ele apenas funcionará com arquivos .txt o qual o usuario tera que digitar a extensão .txt por exemplo, nomedoarquivo.txt Aprendemos neste trabalho a manipular arquivos .txt alocando-os em um vetor o qual poderemos manipular efetuando assim as trocas necessarias, trabalhamos com a tabela ascii, e tambem vimos a função malloc para vetores de tamanho ainda indefinidos e aprendemos a manipular textos com espaço entre os caracteres. Utilizei o compactador em um arquivo .txt de 23 MB e conseguiu compactar para 20 MB pelo tamanho da biblioteca de conversão utilizada até foi um grande ganho visto que o este programa tem o tamanho de 591 KB com todo o codigo e os compactadores atuais tem 4 MB somente de biblioteca. Compartilhar este post Link para o post Compartilhar em outros sites
Edultra 13 Denunciar post Postado Dezembro 10, 2008 Topico atualizado incluido o metodo de compactação Runlenght testes efetuados: o arquivo aaa.txt tinha em seu conteudo original: Compactação metodo Runlengt: 111222223333355556666000000 aaa bbb cccc 9 eeeeeeeee 1 a 2 aa 3 aaa 4 aaaa 5 aaaaa 6 aaaaaa 7 aaaaaaa 8 aaaaaaaa 9 aaaaaaaaa 12 dddddddddddd 21 aaaaaaaaaaaaaaaaaaaaa 10 aaaaaaaaaa 11 aaaaaaaaaaa 20 aaaaaaaaaaaaaaaaaaaa 40 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Compactação de texto: A taxa de desemprego nas seis regiões pesquisadas pelo Departamento Intersindical de Estatísticas e Estudos Socioeconômicos (Dieese) e pelo Seade recuou para 14,1% em setembro, ante taxa de 14,5% no mês anterior. O indicador é o menor para um mês de setembro desde 1998. Segundo o estudo, o desempenho de queda é típico para o período. O nível de ocupação nas áreas pesquisadas subiu 0,8% em setembro em relação a agosto. O número de postos de trabalho criados (130 mil) superou o de pessoas que ingressaram no mercado de trabalho (58 mil), o que resultou no decréscimo do contingente de desempregados (72 mil), para 2,839 milhões de pessoas. Na comparação com setembro de 2007, o nível de ocupação aumentou 5,6%. O total de ocupados nas seis regiões foi estimado em 17,347 milhões de pessoas. A pesquisa foi realizada nas regiões metropolitanas de Belo Horizonte, Porto Alegre, Recife, Salvador, São Paulo e Distrito Federal. Rendimento No conjunto das regiões pesquisadas, o rendimento médio real dos ocupados elevou-se em 1% na passagem de julho para agosto, passando a R$ 1.171,00 – uma alta de 4,8% frente a agosto de 2007. Já o rendimento dos assalariados ficou 0,4% menor, tornando-se equivalente a R$ 1.227. A massa do rendimento dos ocupados apresentou aumento de 1,6% em agosto ante julho e subiu 10% em comparação a agosto de 2007. Segundo a pesquisa, a pequena elevação da massa de salários, de 0,7%, por sua vez, "refletiu o crescimento do nível de emprego, já que o salário médio real variou negativamente". São Paulo O arquivo compactado comp.txt ficou com o seguinte conteudo: Com_ctaçÄ meto§ Runlengt: 1©32©53©55©46©40©6 a©3 b©3 c©4 9 e©9 1 a 2 aa 3 a©3 4 a©4 5 a©5 6 a©6 7 a©7 8 a©8 9 a©9 12 dæ2 21 aæ9aa 10 aæ0 ©311 aæ1 20 aæ9a 40 ©3aæ9aaæ9a Com_ctaçÄ ` texto: A taxa ` `s~prego ¿s seis regiõ¨ p¨quisaƒs pelo De_rt´ento Intersindical ` Estatístic¦&¿Estu§s Socioeconômic® (Die¨e)&¿pelo Sea` recuou _ª 14,1% ~ set~bro, ante taxa ` 14,5% ^ mês anterior. O indica§r é o 1bor _ª um mês ` set~bro `s` 1998. Segun§ o ¨tu§, o `s~penho ` 1aƒ é típico _ª o perío§. O nível ` ocu_çÄ ¿s áre¦ p¨quisaƒs subiu 0,8% ~ set~bro ~ relaçÄ&-ag®to. O número ` p®t® ` tªbalho cria§s (130 mil) superou o ` p¨so¦ 1a ingr¨saªm ^ merca§ ` tªbalho (58 mil), o 1a r¨ultou ^ `créscimo § contingente ` `s~prega§s (72 mil), _ª 2,839 milhõ¨ ` p¨so¦. Na 1c_ªçÄ 1c set~bro ` 2007, o nível ` ocu_çÄ au1btou 5,6%. O total ` ocu_§s ¿s seis regiõ¨ foi ¨tima§ ~ 17,347 milhõ¨ ` p¨so¦. A p¨quisa foi realizaƒ ¿s regiõ¨ metropolita¿s ` Belo Horizonte, Porto Alegre, Recife, Salva§r, SÄ Paulo&¿Distrito Fe`ªl. Rendi1bto No conjunto ƒs regiõ¨ p¨quisaƒs, o rendi1bto médio real §s ocu_§s elevou-se ~ 1% ¿ _ssag~ ` julho _ª ag®to, _ssan§&-R$ 1.171,00 – 1h alta ` 4,8% frente&-ag®to ` 2007. Já o rendi1bto §s ¦salaria§s ficou 0,4% 1bor, tor¿n§-se equivalente&-R$ 1.227. A m¦sa § rendi1bto §s ocu_§s apr¨entou au1bto ` 1,6% ~ ag®to ante julho&¿subiu 10% ~ 1c_ªçÄ&-ag®to ` 2007. Segun§&-p¨quisa,&-pe1a¿ elevaçÄ ƒ m¦sa ` salári®, ` 0,7%, 1e sua vez, "refletiu o cr¨ci1bto § nível ` ~prego, já 1a o salário médio real variou negativ´ente". SÄ PauloO arquivo desc.txt gerado da descompactação do arquivo comp.txt ficou com o seguinte conteúdo: Compactação metodo Runlengt: 111222223333355556666000000 aaa bbb cccc 9 eeeeeeeee 1 a 2 aa 3 aaa 4 aaaa 5 aaaaa 6 aaaaaa 7 aaaaaaa 8 aaaaaaaa 9 aaaaaaaaa 12 dddddddddddd 21 aaaaaaaaaaaaaaaaaaaaa 10 aaaaaaaaaa 11 aaaaaaaaaaa 20 aaaaaaaaaaaaaaaaaaaa 40 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Compactação de texto: A taxa de desemprego nas seis regiões pesquisadas pelo Departamento Intersindical de Estatísticas e Estudos Socioeconômicos (Dieese) e pelo Seade recuou para 14,1% em setembro, ante taxa de 14,5% no mês anterior. O indicador é o menor para um mês de setembro desde 1998. Segundo o estudo, o desempenho de queda é típico para o período. O nível de ocupação nas áreas pesquisadas subiu 0,8% em setembro em relação a agosto. O número de postos de trabalho criados (130 mil) superou o de pessoas que ingressaram no mercado de trabalho (58 mil), o que resultou no decréscimo do contingente de desempregados (72 mil), para 2,839 milhões de pessoas. Na comparação com setembro de 2007, o nível de ocupação aumentou 5,6%. O total de ocupados nas seis regiões foi estimado em 17,347 milhões de pessoas. A pesquisa foi realizada nas regiões metropolitanas de Belo Horizonte, Porto Alegre, Recife, Salvador, São Paulo e Distrito Federal. Rendimento No conjunto das regiões pesquisadas, o rendimento médio real dos ocupados elevou-se em 1% na passagem de julho para agosto, passando a R$ 1.171,00 – uma alta de 4,8% frente a agosto de 2007. Já o rendimento dos assalariados ficou 0,4% menor, tornando-se equivalente a R$ 1.227. A massa do rendimento dos ocupados apresentou aumento de 1,6% em agosto ante julho e subiu 10% em comparação a agosto de 2007. Segundo a pesquisa, a pequena elevação da massa de salários, de 0,7%, por sua vez, "refletiu o crescimento do nível de emprego, já que o salário médio real variou negativamente". São Paulo Compartilhar este post Link para o post Compartilhar em outros sites