31/03/2008, 01:12
|
| | Fecha de Ingreso: marzo-2008
Mensajes: 22
Antigüedad: 16 años, 8 meses Puntos: 1 | |
Re: [B]poner espacios en un vector[/B]
Código:
// Espero que esto te sea lo que buscas.
// Bueno, aquí esta el nuevo código
// Lo que hace es leer línea por línea de un archivo, y buscar los parantesis,
// si encuentra un inicio de parantesis, inserta un espacio si es que antes no hay uno,
// si encuentra un final de parantesis, inserta un espacio después, si es que no hay,
// o si este parentesis el NO es el último caracter de la línea.
// El archivo modificado se guardar bajo un nuevo nombre (filename + ".new").
// Ajuste la function StrInsertText ya que tenía un pequeño bug.
///////////////////////////////////////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <conio.h>
#include <string.h>
void StrInsertText(char *dst, char *src)
{
long len;
len = strlen(src);
if(len)
{
char *end = dst + strlen(dst);
char *aux01 = end;
char *aux02 = end + strlen(src);
while(aux02 > dst)
*aux02-- = *aux01--;
}
len = strlen(src);
if(len)
{
memcpy(dst, src, len);
}
}
void analize(char *filename)
{
FILE *pfSrc;
FILE *pfDst;
char filenamenew[250];
pfSrc = fopen(filename, "r");
strcpy(filenamenew, filename);
strcat(filenamenew, ".new");
pfDst = fopen(filenamenew, "w");
if(pfSrc == NULL) // Si el archivo de origen es igual a NULL
{
printf("No se pudo abrir el archivo: \"%s\"", filename);
}
else if(pfDst != NULL) // Si el archivo de destino es diferente NULL (por supuesto que el archivo de origen tambien)
{
char *p;
char sz[250];
while(!feof(pfSrc))
{
// fgets(sz, 250, pfSrc); // Esto no es recomendable
if(fgets(sz, 250, pfSrc)) // Siempre es necesario comprobar si la función tubo éxito
// De lo contrario, cuando se llega al final del archivo, se estaría analizando la línea anterior
{
for(p = sz; *p != '\n'; p++)
{
if(*p == '(' && ((p != sz) && *(p - 1) != ' ')) // Inserta un espacio antes del paréntesis si es que no lo hay
StrInsertText(p++, " ");
// else if(*p == ')' && *(p + 1) != ' ') // Inserta un espacia despues del paréntesis si es que no lo hay
else if(*p == ')' && *(p + 1) != ' ' && *(p + 1) != '\n') // Inserta un espacia despues del paréntesis si es que no lo hay, y si no es el último caracter de la línea
StrInsertText(++p, " ");
}
fputs(sz, pfDst);
}
}
printf("Ok\n");
}
if(pfSrc)
fclose(pfSrc);
if(pfDst)
fclose(pfDst);
}
void main(int argc, char *argv[])
{
long i;
if(argc > 1) // Si hay argumentos
{
for(i = 1; i < argc; i++)
{
analize(argv[i]);
}
}
else // Si no hay argumentos, utilizar un archivo predefinido
{
analize("test.txt");
}
getch();
}
// Lo probé y me funciona, pero no sé si es lo que buscas.
/* Ejemplo:
------------------------------------------------------------
// Antes:
((((texto_01))(texto_02)()))
(()()((texto_01)(texto_02))())
// Después:
( ( ( (texto_01) ) (texto_02) () ) )
( () () ( (texto_01) (texto_02) ) () )
*/
|