C split
Publicado por Enzo de Brito Ferber (última atualização em 23/01/2013)
[ Hits: 5.825 ]
Homepage: http://www.maximasonorizacao.com.br
Download split.tar (versão 2)
Download 1358166997.split.tar (versão 3)
Função parecida com a split() do JavaScript.
$ gcc -o split split.c
$ ./split
Pode-se excluir a função main desse fonte, e usá-lo como "include" em outros projetos:
$ gcc -c split.c
$ gcc split.o meu_programa.o -o meu_programa
No 'meu_programa' basta chamar a função.
Versão 2 - Enviado por Enzo de Brito Ferber em 21/12/2012
Changelog: Script menor e melhor.
Atualização para trabalhar com pipes na linha de comando.
Um exemplo muito bom de como pode ser usado é:
$ echo $LS_COLORS | split
Irá mostrar uma extensão por linha das definições de cores do 'ls'.
O programa agora aceita apenas 1 argumento (opcional), e o primeiro caractere desse argumento é o separador.
O default é ':' (o join também).
Versão 3 - Enviado por Enzo de Brito Ferber em 14/01/2013
Changelog: Função menor, mais clara e melhor.
O programa agora lê da entrada padrão, stdin, o que faz a integração com a linha de comando do linux(pipes) muito boa.
/* split.c * * Enzo Ferber * dez 2011 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> /* poscpy() * * @t = target string (should be malloc(a + b + 1)) * @s = source string * @a = startpoint in source string (must be > 0 ) * @b = endpoint in source string (must be < strlen(s)) * * @function * copys s[a] -> s[b] into t. * */ void poscpy ( char *t, char *s, int a, int b ) { while ( a < b ) *(t++) = *(s + (a++)); *t = 0x0; } char **split ( char *str, char n, int *length ) { register int i, j, a; /* control */ int len = strlen(str); int elements = 0, elpos = 0; char **array; /* number of new itens in array */ for ( i = 0; i < len; i++ ) if ( str[i] == n ) elements++; /* get the memory */ array = ( char ** ) calloc ( elements , sizeof(char *)); if ( !array ) { printf ( "# Error in malloc(*).\n" ); return NULL; } /* the number of elements for the caller */ *length = elements; /* lvl1 * * @i = will be the start point for copy */ for ( i = 0; i < len; i++ ) /* lvl2 * * @j = will be end point for copy */ for ( j = i; j <=len; j++ ) /* found splitChar or EoL */ if ( str[j] == n ) { /* * @i has start point * @j has end point */ array[ elpos ] = ( char *) malloc ( (j - i + 1) * sizeof(char)); if ( !array[ elpos ] ) { printf ( "# lvl2\n"); printf ( " # Error in malloc().\n" ); return NULL; } /* copy the string into the array */ poscpy ( array[ elpos ], str, i, j ); /* increment array position */ elpos++; /* after the copy is done, * * @i must be equal to @j */ i = j; /* end loop lvl2 */ break; } /* return array */ return array; } int main ( void ) { int len, i; char *str = "Enzo:de:Brito:Ferber:Viva:O:Linux:A:Maior:Comunidade:Linux:da:America:Latina!:"; char **elements = split(str, ':', &len); // reference pointer char **a = elements; printf ( "# Elements: %d\n", len ); while ( *a ) printf (" # %s\n", *(a++)); return 0; }
Retirar ocorrências de uma substring dentro de uma string
Nenhum comentário foi encontrado.
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Firewall iptables - Rotear Interface Cliente (0)
Modernização e Avanço do Linux. (20)
Desempenho abaixo do esperado - travadas e congelamento do sistema ope... (3)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta