SABERMASJUSTODARACT
SABERMASJUSTODARACT Por una Facultad de provecho a la comunidad

Apendice 1 C++

Respondiendo una pregunta en Yahoo.
Para almacenar datos primero tenes que contar con una estructura de datos, como un vector de string que en c será una matriz de caracteres, luego por el indice del vector lo relacionaras con otros datos correspondientes al mismo registro, sea otro u otros vectores de strings, vectores de enteros vectores de floats etc.
Estructura de datos
vector de strings
vector de strings
vector de enteros
vector de lo que se necesite
otros vectores
se inicia un bucle for desde 0 hasta la cantidad de elementos de cada vector ( n)
Ingerse el nombre de la persona --> al primer vector
Ingrese el apellido de esa persona --> al segundo vector
ingrese la edad de la persona --> al vector de enteros
ingrese el dato que necesite --> al vector de datos que se necesiten
--------
ingrese este ultimo dato --> al vector de ultimos datos
fin de la crga de este registro, se incrementa en un el indice de los vectores
y se reiicia el procedimiento para el segundo registro
Se pone una condicion como que si el primer dato es un string nulo, se cierra el proceso de carga antes de llegar a "n", si no se pone esta condicion el proceso se repetira hasta tener todos los datos cargados.

Para salvaguardar los datos, y no tener que volver a cargarlos, será conveniente tener un archivo de disco ( o varios) que guarden los vectores, y luego al iniciar de nuevo el programa, recuperen esos datos y los carguen en forma automatica a los vectores.

Para continuar con la carga de datos, se inicia un for que se detenga cuando el primer vector tenga string nulo, y conservando ese valor del indice, se inicia a partir de alli el proceso de carga de datos
se inicia un bucle for desde "ese valor" hasta la cantidad de elementos de cada vector ( n).

Para buscar un nombre dentro de un string, se puede hacerlo mediante la comparacion strcmp que devuelde algo distinto de 0 si no coinciden y 0 si son iguales, para lo cual, deberemos cargar en un string el nombre a buscar y recorrer los nombres desde el vector 0 hasta el n, si llega al n y no encontro nada, entonces el nombre no está, si llega a un string igual, muestra el resultado de ese y los demas datos junto con el indice donde lo encontro, lo cual nos dará un listado de coincidencias, que nos servirá para saber si esa persona esta anotada, al verificar si corresponden los dems datos.

Otro procedimiento mas rápido para la busqueda, es filtrar por las primeras letras del apellido, para lo cual no es necesario usar el strcmp sino fijar la primera letra y la segunda por ejemplo, y recooriendo los vactores en manera similar a la anterior, si el vector apellido[0][i] == 'primera letra' && apellido[1][i]== 'segunda letra'  (notese que en la comparacion usé comilla simple par la comparacion de un caracter) entonces muestro el resto del registro y el indice, para saber si se trata de nuestro amigo, y luego si existe en el listado es que ya está en la posicion del indice i mostrado.

Ahora, como esto de los vectores funciona, pero en medio enredado para programar, y tambien para guardar en un archivo de disco, C ha provisto de una estructura de datos, en C es UNION en C++ son los STRUCT
este tipo de datos estan compuestos por ese conjunto de vectores, como si fuera un unico elemento de un vector
struct gente{
char ape[30];
char name[30];
int edad;
char mail[50];
float saldo;
} amigo[200];
de esta manera creo una estructura para registrar 200 amigos y sus datos, el nombre del tipo de dato declarado es gente, amigo es un vector de ese tipo de datos de 200 elementos (esto es como funcionan las clase y los objetos, la declaracion es una clase, pero cuando se crea una instancia de la clase recien es un objeto)
A su vez, todo esto puede ser guardado como un solo bloque, y recuperado del disco en un solo bloque en forma sencilla
File *arch;
if((arch=fopen("DATOS.DAT","r+"))==NULL)
{
printf("ERROR; NO SE PUDO ABRIR EL ARCHIVO\n");
getchar();
arch=fopen("DATOS.DAT","w+");
printf("CREADO EL ARCHIVO\n");
exit(1);//termina el programa devolviendo al sistema un error 1
}
else
{
fread(&amigo,sizeof(amigo),1,arch);
fclose(arch);
}

/*ya tenemos el struct cargado con los datos del archivo, si el archivo no existe indicará error, por lo que habra que crearlo para que lo encuentre, si es la primera vez que se ejecuta. Una vez abierto el archivo sin error, se cargan los datos o se busca como en el caso de los vectores y una vez terminada la carga se guarda
arch=fopen("DATOS.DAT","w+");
fwrite(&amigo,sizeof(amigo),1,arch);
fclose(arch);

Espero que puedas llevar a cabo tu proyecto

strcmp() de la libreria string.h
lo demas de la libreria stdio.h
 ▄▄▄▄▄▄▄▄▄▄
   STRING.H
  ▀▀▀▀▀▀▀▀▀
  Functions
  ▀▀▀▀▀▀▀▀▀
   _fmemccpy    _fmemchr     _fmemcmp     _fmemcpy     _fmemicmp
   _fmemset     _fstrcat     _fstrchr     _fstrcmp     _fstrcpy
   _fstrcspn    _fstrdup     _fstricmp    _fstrlen     _fstrlwr
   _fstrncat    _fstrncmp    _fstrnicmp   _fstrncpy    _fstrnset
   _fstrpbrk    _fstrrchr    _fstrrev     _fstrset     _fstrspn
   _fstrstr     _fstrtok     _fstrupr     memccpy      memchr
   memcmp       memcpy       memicmp      memmove      memset
   movedata     movmem       setmem       stpcpy       strcat
   strchr       strcmp       strcmpi      strcpy       strcspn
   strdup       _strerror    strerror     stricmp      strlen
   strlwr       strncat      strncmp      strncmpi     strncpy
   strnicmp     strnset      strpbrk      strrchr      strrev
   strset       strspn       strstr       strtok       strxfrm
   strupr
 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
 ¦_fstricmp, _fstrcmp,      Ì      <STRING.H>
 ¦strcmp, strcmpi, stricmp  Ì
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  ■ _fstrcmp and strcmp compare two strings
  ■ strcmpi (a macro) compares two strings without case sensitivity
  ■ _fstricmp and stricmp compare two strings without case sensitivity

 Declaration:
  ■ int strcmp(const char *s1, const char*s2);
  ■ int strcmpi(const char *s1, const char *s2)
  ■ int stricmp(const char *s1, const char *s2);
  ■ int far _fstrcmp(const char far *s1, const char far *s2);
  ■ int far _fstricmp(const char far *s1, const char far *s2);

 Remarks:
■ strcmp performs an unsigned comparison of s1 to s2. _fstrcmp is the far
version.

■ strcmpi (implemented as a macro that calls stricmp) performs an unsigned
comparison of s1 to s2, without case sensitivity.

■ stricmp performs an unsigned comparison of s1 to s2, without case
sensitivity. _fstricmp is the far version.

The string comparison starts with the first character in each string and
continues with subsequent characters until the corresponding characters
differ or until the end of the strings is reached.

To use strcmpi, you must include STRING.H. This macro is provided for
compatibility with other C compilers.
El taductor dice:
 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  | _fstrnicmp, _fstrncmp, Strncmp      <String. H>
  | Strncmpi, arranque strnicmp
  ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
   ■ _fstrncmp y strncmp Comparar porciones de dos cadenas
   ■ strncmpi (una macro) Compara porciones de dos cadenas,
     sin mayúsculas y minúsculas
   ■ _fstrnicmp y strnicmp Comparar porciones de dos cadenas,
     sin mayúsculas y minúsculas

  Declaración:
   ■ int strncmp (const char * s1, const char * s2, size_t maxlen);
   ■ int strncmpi (const char * s1, const char * s2, size_t maxlen);
   ■ int strnicmp (const char * s1, const char * s2, size_t maxlen);
   ■ _fstrncmp int impresión (const char * s1 ahora, const char * s2 impresión,
       size_t maxlen);
   ■ _fstrnicmp int impresión (const char * s1 ahora, const char * s2 impresión,
       size_t maxlen);

  observaciones:
 Cada una de estas rutinas Compara s1 a s2, mirando a no más de maxlen
 Personajes.

 ■ strncmp y _fstrncmp performaces una comparación sin signo de s1 a s2.

 ■ strncmpi (implementado como una macro que llama strnicmp) realiza una
 comparación de s1 a s2, sin mayúsculas y minúsculas.

 ■ strnicmp y _fstrnicmp realiza una comparación de s1 a s2, sin
 diferenciar entre mayúsculas y minúsculas.

Vemos ahora otra libreia que usamos y sus funciones

 ▄▄▄▄▄▄▄▄▄
  STDIO.H
 ▀▀▀▀▀▀▀▀▀
 Functions
 ▀▀▀▀▀▀▀▀▀
  clearerr    fclose      fcloseall   fdopen      feof        ferror
  fflush      fgetc       fgetchar    fgetpos     fgets       fileno
  flushall    fopen       fprintf     fputc       fputchar    fputs
  fread       freopen     fscanf      fseek       fsetpos     ftell
  fwrite      getc        getchar     gets        getw        perror
  printf      putc        putchar     puts        putw        remove
  rename      rewind      rmtmp       scanf       setbuf      setvbuf
  sprintf     sscanf      strerror    _strerror   tempnam     tmpfile
  tmpnam      ungetc      unlink      vfprintf    vfscanf     vprintf
  vscanf      vsprintf    vsscanf

 ▄▄▄▄▄▄▄▄
 ¦fwriteÌ                           <STDIO.H>
 ▀▀▀▀▀▀▀▀
 Writes to a stream

 Declaration:
   size_t fwrite(const void *ptr, size_t size, size_t n, FILE*stream);

 Remarks:
fwrite appends a specified number of equal-sized data items to an output
file.

 Argument│ What It Is/Does
 ════════Ï═══════════════════════════════════════════════════════
  ptr       │ Pointer to any object; the data written begins at ptr
  size     │ Length of each item of data
  n         │ Number of data items to be appended
  stream │ Specifies output file

The total number of bytes written is
  (n * size)

 Return Value:
  ■ On success, returns the number of items (not bytes) actually written.
  ■ On error, returns a short count.


 Ì▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀¦
 Ì fdopen, fopen, freopen, _fsopen ¦<STDIO.H>
 Ì▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄¦

  ■ fdopen associates a stream with a file handle
  ■ fopen opens a stream
  ■ freopen associates a new file with an open stream
  ■ _fsopen opens a stream with file sharing

 Declaration:
  ■ FILE *fdopen(int handle, char *type);
  ■ FILE *fopen(const char *filename, const char *mode);
  ■ FILE *freopen(const char *filename, const char *mode, FILE *stream);
  ■ _fsopen:
      #include <stdio.h>
      #include <share.h>
      FILE *_fsopen(const char *filename, const char *mode, int shflg);

 Remarks:
■ fdopen associates a stream with a file handle obtained from creat, dup,
dup2, or open.

■ fopen and _fsopen open a file and associate a stream with it. Both
functions return a pointer that identifies the stream in subsequent
operations.

■ freopen substitutes a file in place of the open stream and closes the
stream, regardless of whether the open succeeds. freopen is useful for
changing the file attached to stdin, stdout, or stderr.

  Argument│  Function          │ What Argument Is/Does
 ═════════Ï════════════════Ï════════════════════════════════════════════════
  handle     │ fdopen              │ File handle from creat, dup, dup2, or open
  type         │ fdopen              │ Type of the stream; must match the mode of
                 │                          │ the open handle.
 ──────┼─────────┼────────────────────────────────────────────────
  filename │ fopen, _fsopen  │ File that the functions open
                 │ freopen             │ File substituted in place of the open stream
 ─────┼──────────┼────────────────────────────────────────────────
  mode    │ fopen, freopen,    │ Mode string: defines the mode of the opened
               │ and _fsopen        │ file (r, w, a, r+, w+, a+, etc.)
 ─────┼──────────┼────────────────────────────────────────────────
  stream  │ freopen               │ Open stream, substituted by filename
  shflag   │ _fsopen               │ Specifies the type of file sharing allowed on
              │                             │ filename.

Symbolic constants for shflag are defined in SHARE.H. The file-sharing flags
are ignored if the DOS SHARE command has not been run.

When a file is opened for update, both input and output can be done on the
resulting stream. However:
 ■ output can't be directly followed by input
   without an intervening fseek or rewind
 ■ input can't be directly followed by output
   without an intervening fseek or rewind, or
   an input that encounters end-of-file

 Return Value:
  ■ On success,
  ■ fdopen, fopen, and _fsopen return a
    pointer to the newly opened stream
  ■ freopen returns the argument stream
  ■ On error, these functions return null

  fopen example
 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀

 /* Program to create backup of the AUTOEXEC.BAT file */

 #include <stdio.h>

 int main(void)
 {
    FILE *in, *out;

    if ((in = fopen("\\AUTOEXEC.BAT", "rt"))
        == NULL)
    {
       fprintf(stderr, "Cannot open input file.\n");
       return 1;
    }

    if ((out = fopen("\\AUTOEXEC.BAK", "wt"))
        == NULL)
    {
       fprintf(stderr, "Cannot open output file.\n");
       return 1;
    }

    while (!feof(in))
       fputc(fgetc(in), out);

    fclose(in);
    fclose(out);
    return 0;
 }

Esto es una copia parcial de la ayuda de Turbo C++ de Borland version 3 e inferiores, el programa esta a disposicion de quien quiera bajarlo para poder contar con esta ayuda, claro que hay que saber un poco de inglés

http://www.4shared.com/rar/m6Utfwln/TC_online.html

Como este editor esta diseñado solo para consola, para DOS y UNIX, vamos a encontrar algunas cosas que
los compiladores modernos no incluyen, aunque DevC++ tiene paquetes instalables que permiten emular la libreria conio.h con conio2.h y la libreria graphics.h para obtener sobre consola algunas ventajas ya no disponibles en los modernos compiladores, que se han orientado a la presentacion grafica del sistema windows. (nigocios son nigocios)





Algunos ejemplos utilizando conio2.h o la original conio.h de TurboC++ de Borland
-------------------------------------------------------------------------------------------------------------------------
https://ar.answers.yahoo.com/question/index?qid=20160315205901AADOEjI

¿Como generar archivo.xml en c?

He estado buscando informacion sobre como generar archivos .xml en lenguaje c pero no eh encontrado mucho me podran ayudar con este problema

Hola:
Tanto html como xml usan simbolos que c y c++ no pueden usar como caracteres, por lo que la solucion es usar el sistema (o las llamadas al sistema desde c o c++) para ir armando tu documento.
Aqui te presento algo secillo, como mostrar un mensaje, o sea crear un documento que muestre un mensaje.
Para armar el documento <Mensaje> no se puede escribir, por los signos, y tampoco </mensaje> que sería el cierre del mismo, asimismo el encabezado que consta de signos, por lo que trnscribimos a nuestro documento mediante el sistema otros documentos pre-hechos que tienen estos elementos
LLamaremos cabeza.txt al encabezado, y sera un documento de texto que diga:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE Edit_Mensaje SYSTEM "Edit_Mensaje.dtd">

<Edit_Mensaje>
luego otro documento que inicie el mensaje que llamaremos abremen.txt  y diga
<Mensaje>
Luego otro documento que cierre el mensaje cierramen.txtque diga
</Mensaje>
luego otro documento que termine, que llamaremos fin.txt y diga
</Edit_Mensaje>

Guardas todo dentro de una misma carpeta incluso el cpp y el ejecutable generado

#include <stdlib.h>
#include <stdio.h>

char cadena[100];
char mensa[100];
main(){
system("@echo off");
system("type cabeza.txt >miarch.xml");
system("type abremen.txt >>miarch.xml");
printf("ingrese el mensaje: ");
gets(mensa);
sprintf(cadena, "%s%s%s", "@echo ", mensa, " >>miarch.xml");
system(cadena);
system("type cierramen.txt >>miarch.xml");
system("type fin.txt >>miarch.xml");
}

y fijate como crea tu documento.


SEGUIR-->
Este sitio web fue creado de forma gratuita con PaginaWebGratis.es. ¿Quieres también tu sitio web propio?
Registrarse gratis