Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - el_lujo

#1
Gracias, señores por sus aportes.  Voy a probar el código enviado por SrMcLister.

Mil gracias nuevamente.
#2
Saludos, señores.

Debido a una necesidad, quisiera una ayuda de ustedes los expertos.

Mi necesidad es la siguiente:
a 50 usuarios se les guardan todos los archivos de documentos con un gestor de respaldo; pero cada día debo borrar esos archivos navegando cada una de las carpetas.

En síntesis, quisiera saber si existe una forma (creo que sí) que yo pueda en batch borrar todos los archivos exceptuando algunas subcarpetas y por ende los archivos en esa subcarpeta.

Navegando por la web vi unas líneas de códigos para manejo de borrado de carpetas y obviando algunas dependiendo de un archivo .txt.

Lo encontrado fue esto:
Esto para crear la lista de directorios y guardarlos en un archivo:


dir /ad /b > carpetas.txt

Y esto para eliminar las subcarpetas


For /f "delims=" %n in (carpetas.txt) do rmdir /s /q "%%n"


Ahora bien, tratando de implementar esto a mi necesidad:


@ECHO OFF
TITLE BORRADO DOCs. OFFICE
ECHO SE COMENZARA CON EL BORRADO DE LOS ARCHIVOS
ECHO ASEGURESE DE QUE LA CARPETA DE LOS ARCHIVOS EN OFFICE
ECHO ESTA MAPEADA EN LA UNIDAD Z:
PAUSE
Z:
For /f "delims=" %n in (carpetas.txt) do rmdir /s /q "%n"
ECHO BORRADO COMPLETO
PAUSE > NULL


La pregunta:

Cómo puedo, en vez de borrar subcarpetas, borrar sólo los archivos, tanto de la carperas como subcarpetas de esa unidad?

Gracias.
#3
Buen día.
Pido disculpas por la demora en atender las publicaciones.

Gracias engel lex, definitivamente tienes razón.  Mi problema esta en que debo aprender más de C++.  Como decía en el principio, soy un super novato y es por eso que mi comprensión de las funciones, métodos, clases y, por supuesto mi lógica, es muy débil.

Tomaré en cuenta primero estudiar bien los string e iostream.

Gracias, _Enko por tu comentario. Tienes razón sobre el uso no obligatorio de PROGRAM. Sin embargo, como es una simulación de ese compilador se pide eso, no para hacerlo ver como obligatorio, sino para ayudarnos a encontrar estos problemas, osea uso de las cadenas, en el que ustedes, especialmente engel lex, han dado tanta ayuda.

Engel lex, luego de que comentaste los códigos comprendí mucho mejor de la lógica y cómo debe tomarse en cuenta.



#4
Ufff!!
engel lex, no me siento mal al reconocer que soy un burro, pero ahora estoy algo confundido.  Me confundo donde al final me retorna (i,f).

Tengo que tener en cuenta que al resultado de las eliminaciones de espacios yo pueda  tomarle el tamaño de la cadena para poder hacer las comparaciones si me faltara 'PROGRAM', 'NombreArchivo' y ';'.

*Nota: Cambié:



Código (cpp) [Seleccionar]
string trim(string s);

por:

Código (cpp) [Seleccionar]
string trim(string cadena);

Así lo tengo luego de tu ayuda:

Código (cpp) [Seleccionar]

/*SIMULACION DE COMPILADOR PASCAL*/

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

using namespace std;
string trim(string cadena);

int main()
{
char cCad[50],cCadena[50], cPRO[8]="PROGRAM",cPRO1[8]="program";
   int  TaCad,cont=0;
   
       system ("cls");
printf("\n\t               SIMULACION COMPILADOR PASCAL \n\n");
       printf ("\n1: ");gets (cCadena);

   
string trim(cCadena);

TaCad=strlen(cCad);
if (cCad[0]=='\0')  
{
printf ("\n Error [Linea 1]:- Falta 'PROGRAM', 'nombre del programa' y ';' \n ");
}

for ( i=0; i<=6; i++)
{

if (cCad[i]!= cPRO[i])
{
if (cCad[i]!=cPRO1[i]) cont++;
}
}

if (cCad[i]==' ')

if (cont!=0 && TaCad>0)
{
printf ("\n Error [Linea 1]:- 'PROGRAM' esta mal escrito  \n ");
}

if (cCad[7]!=' ' && cont==0 && TaCad>8)
{
printf ("\n Error [Linea 1]:- Falta espacio entre 'PROGRAM' y nombre de programa\n");
}

if (cCad[7]!=' ' && cont!=0 && TaCad<8)
{
printf ("\n Error [Linea 1]:- Omision de espacio entre 'PROGRAM' Y el nombre del Programa\n");
}

if  (cCad[8]==';' && cont==0 && TaCad>=7)
{
printf ("\n Error [Linea 1]:- Omision del nombre del programa \n\n");
}

if  (cCad[8]==';' && cont==0 && TaCad==8)
{
printf ("\n Error [Linea 1]:- Omision del nombre del programa \n\n");
}

if  (cCad[1]==' '|| cCad[0]==';' ||cCad[8]==' ')  
{
printf ("\n Error [Linea 1]:- Omision del nombre del programa \n\n");
}

if (cCad[7]==';' || cCad[7]=='\0' && cont==0)
{
printf ("\n Error [Linea 1]:- Omision del nombre del programa \n\n");
}

if (cCad[TaCad-1]!=';')
{
printf ("\n Error [Linea 1]:- Falta El ';' al Final de la linea\n\n");
}

     
system ("PAUSE");
}

string trim(string cadena)
{
string::iterator i = cadena.begin();
string::iterator f = cadena.end();
while(*i==' ')
i++;

while(*f==' ')
f--;

return string(i,f);
}
#5
Excelente.
Gracias por el consejo y por la enseñanza.

Mano a la obra.
#6
Gracias, engel lex.
Mis disculpas por mi ignorancia; no estaba claro sobre publicar códigos.  Ya lo tendré pendiente.

Sobre la ayuda que me acabas de dar, estoy muy agradecido. Mi problema es que soy novato en C/C++ y por tal razón estoy aprendiendo en la marcha.

Para estar claro, el código que me hiciste iría en la función, cierto?
Gracias y discúlpame de nuevo.
#7
Saludos, señores.

quisiera orientación sobre un problema que no puedo resolver en un programa en c/c++, el cual debo simular la primera línea del compilador pascal.

Donde tengo problemas es en la supresión de los espacios en blanco a la izquierda de la cadena, ejm.  suponiendo que la primera linea es: program NombrePrograma;

Quiero suprimir cualquier espacio en blanco que tenga esta línea a la izquierda y derecha.  Adjunto lo que he logrado en conjunto con otros compañeros.

Con ayuda de la internet, agregué una función que por sí sola suprime los espacios, pero no sé por qué no me resulta igual agregandola al código.

sé que algo esta mal pero no puedo verlo.


Gracias.

Código (cpp) [Seleccionar]
/*Simulacion de Pascal

*/

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

void suprime(char cadena[]);

int main()
{
char cCad[50],cCadena[50], cPRO[8]="PROGRAM",cPRO1[8]="program";
   int  TaCad,cont=0;
   
       system ("cls");
printf("\n\t               SIMULACION COMPILADOR PASCAL \n\n");
       printf ("\n1: ");gets (cCadena);

   
  //=================================================================================
suprime(cCadena);
TaCad=strlen(cCad);
if (cCad[0]=='\0')  
{
printf ("\n Error [Linea 1]:- Falta 'PROGRAM', 'nombre del programa' y ';' \n ");
}

for ( i=0; i<=6; i++)
{

if (cCad[i]!= cPRO[i])
{
if (cCad[i]!=cPRO1[i]) cont++;
}
}

if (cCad[i]==' ')

if (cont!=0 && TaCad>0)
{
printf ("\n Error [Linea 1]:- 'PROGRAM' esta mal escrito  \n ");
}

if (cCad[7]!=' ' && cont==0 && TaCad>8)
{
printf ("\n Error [Linea 1]:- Falta espacio entre 'PROGRAM' y nombre de programa\n");
}

if (cCad[7]!=' ' && cont!=0 && TaCad<8)
{
printf ("\n Error [Linea 1]:- Omision de espacio entre 'PROGRAM' Y el nombre del Programa\n");
}

if  (cCad[8]==';' && cont==0 && TaCad>=7)
{
printf ("\n Error [Linea 1]:- Omision del nombre del programa \n\n");
}

if  (cCad[8]==';' && cont==0 && TaCad==8 )
{
printf ("\n Error [Linea 1]:- Omision del nombre del programa \n\n");
}

if  (cCad[1]==' '|| cCad[0]==';' ||cCad[8]==' ')  
{
printf ("\n Error [Linea 1]:- Omision del nombre del programa \n\n");
}

if (cCad[7]==';' || cCad[7]=='\0' && cont==0)
{
printf ("\n Error [Linea 1]:- Omision del nombre del programa \n\n");
}

if (cCad[TaCad-1]!=';')
{
printf ("\n Error [Linea 1]:- Falta El ';' al Final de la linea\n\n");
}

     
system ("PAUSE");
}

void suprime(char cadena[])
{

char cCad[100];
int x=0, z=0, y=strlen(cadena);




while(cadena[x]==' ')
{
if(cadena[x]==' ')
x++;
}


while(cadena[x]!='\0')
{

cCad[z]=cadena[x];
x++;
z++;
}

}


Mod: Cuando publiques código, usa las etiquetas GeSHi
#8
Gracias, rir3760. Exactamente eso es lo que quería comprender.

Igualmente tomaré tiempo para lee el tema: |Lo que no hay que hacer en C/C++. Nivel basico|.

Mil gracias.
#9
Gracias, Caster por el interés en ayudarme.
Lo que sucede, Caster, es que estamos en tratar de entender cómo funcionan los sistemas operativos.  Eso es sólo para darnos a entender el por qué no debemos usar el comando interno del lenguaje, sino hacer una aplicación que simule los comando internos del lenguaje.

Adjunté el fuente del programa que fue hecho por el profesor en el aula; el reto es ahora que cuando elijamos una de las opciones dentro de la corrida del programa, ignore los espacios en banco.

Ejemplo: Si elegimos "cls" y por error digitamos: "  cls" o "cls    " en el prompt, haya una función que ignore esos espacios en blanco, siempre y cuando lo digitado corresponda a una de las opciones.

Espero haber sido explícito.

Gracias.
#10
Saludos, amigos.

Fuente de lo que el profesor nos puso:
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>


void Mayusc_Minusc(char *s) //convertir de Mayuscula a minuscula
{
   for( ; *s != '\0' ; s++)
   {
      if(*s >= 'A' && *s <= 'Z'){
         *s += (char)32;
      }
      
   }
}




int main(){
   char limpiar[20] = "limpiar", cerrar[15] = "salir", limpiarLinux[15] = "clear", limpiarWind[15] = "cls", ayuda[15] = "help",cadena[20],dirwindow[15]="dir",lslinux[15]="ls",dirdominica[15]="directorio";
   printf("\t\t***************************************************\n");
   printf("\t\t\t Programa Limpiar Pantalla \n \t\t\tPara Cerrar Escribir (salir)\n");
   printf("\t\t***************************************************\n\n");
   
   do{
      printf(">> ");
      gets(cadena);
   (   Mayusc_Minusc(cadena);)*/
      if(strcmp(cadena,limpiar) == 0 || strcmp(cadena,limpiarLinux) == 0 || strcmp(cadena,limpiarWind) == 0){
         system("cls");
         printf("\t\t************************************************\n");
         printf("\t\t\t Pantalla(Ms-DOS)(Terminal)(Domincana)\n");
         printf("\t\t************************************************\n\n");      
      }else if(strcmp(cadena,ayuda) == 0){
         system("cls");
         printf("\t\t********************************************\n");
         printf("\t\t Comandos Del Sistema: \n");
         printf("\t\t (limpiar)(clear)(cls) <--> Comando para limpiar\n");
         printf("\t\t (salir) <--> Comando para salir\n");
         printf("\t\t (help) -- Comando para ayuda\n");
         printf("\t\t (dir)(ls)(directorio) <----> Comando para directorio\n");
         printf("\t\t********************************************\n\n");
      }else if(strcmp(cadena,dirwindow) == 0 || strcmp(cadena,lslinux) == 0 || strcmp(cadena,dirdominica)){
         printf("\t\t********************************************\n");
         printf("\t\t\t Lista de Archivos en El Directorio\n");
         printf("\t\t********************************************\n");
         system("dir");
      }else{
         printf("\t!!! ERROR Comando no Validos.. Entrasr a (help) para ayuda\n");
      }
      
      
   }while(strcmp(cadena,cerrar) != 0);
   
   
}

Ahora bien, lo que él pide es controlar los espacios en blanco accidentales que cuando se digite cualquier opción en el programa.

Estuve googleando y no pude encontrar ayuda o simplemente no estoy haciendo la pregunta correcta.

Gracias.