Título: [C++] Uso de <vector>
Publicado por: MeCraniDOS en 22 Junio 2013, 19:16 pm
Buenas, tengo este código...#include <stdio.h> #include <io.h> int main() { struct _finddata_t arch; long result; int n; if ( (result = _findfirst("*.txt", &arch)) == -1 ) { printf("\n ~ No hay Archivos ~\n\n"); } else { printf("\n ~ Seleccion de Archivos ~\n\n"); n = 1; do { printf(" %d.- %s\n", n, arch.name); n+=1; } while ( _findnext(result, &arch) == 0 ); _findclose(result); } printf("\n Que archivo quieres abrir?"); getchar(); }
Quiero modificarlo de manera que en vez de escribir el nombre del archivo para abrirlo, solo ponga el numero que lleva delante, es decir, que ponga 1, y se abra el primer archivo.. :silbar:
Creo que se hace con <vector> pero no se como usarlo, espero que puedan ayudarme ;-)
Saludos
Título: Re: [C++] Uso de <vector>
Publicado por: amchacon en 22 Junio 2013, 20:34 pm
Tú lo que quieres es algo parecido a mi Rar File Missing.
Consulta mi código, no obstante es bastante sencillo (vas guardando los nombres en un vector, después le pides al usuario un número y accedes a ese elemento del vector).
Título: Re: [C++] Uso de <vector>
Publicado por: MeCraniDOS en 22 Junio 2013, 20:37 pm
Tú lo que quieres es algo parecido a mi Rar File Missing.
Siii, es exactamente lo que quiero :rolleyes: :rolleyes:
Mire tu código pero no te voy a decir la que lié... :¬¬ :¬¬
No se como guardar lo nombres en un vector :-\
Editado
He mirado tu codigo y se queda trabado en "Buscando archivos Rar en la carpeta..." :-\
Título: Re: [C++] Uso de <vector>
Publicado por: amchacon en 23 Junio 2013, 00:29 am
No se como guardar lo nombres en un vector :-\ Pues si no sabemos ni siquiera usar un vector vamos mal :silbar: Mírate este vídeo: http://www.youtube.com/watch?feature=player_embedded&v=ySZ60lvuoo4
Título: Re: [C++] Uso de <vector>
Publicado por: MeCraniDOS en 23 Junio 2013, 00:43 am
Pues si no sabemos ni siquiera usar un vector vamos mal :silbar:
Ahora ya si que funciona, pero es lo que te digo, se me queda trabado en el "Buscando archivos Rar en la carpeta..." y no pasa de ahí...
Título: Re: [C++] Uso de <vector>
Publicado por: amchacon en 23 Junio 2013, 11:48 am
¿Pero no estabas usando archivos .txt?
Borra todo lo que tengas y vuelve al código inicial. Después mirate el vídeo que te pasé.
Título: Re: [C++] Uso de <vector>
Publicado por: MeCraniDOS en 23 Junio 2013, 14:13 pm
¿Pero no estabas usando archivos .txt?
En la función ExtensionRar, cambie el "rar" por "txt", ya lo adapte a lo que quería y no me daba fallos, pero como no funcionaba intente compilar tu proyecto, y también se quedaba trabado en esa linea, del tuyo no modifique nada... :-\ :-\
Título: Re: [C++] Uso de <vector>
Publicado por: ecfisa en 23 Junio 2013, 22:11 pm
Hola MeCraniDOS. Quiero modificarlo de manera que en vez de escribir el nombre del archivo para abrirlo, solo ponga el numero que lleva delante, es decir, que ponga 1, y se abra el primer archivo.. :silbar:
Creo que se hace con <vector> pero no se como usarlo, espero que puedan ayudarme ;-)
Tal vez este código muy básico te pueda servir de guía: #include<iostream> #include <vector> #include <string> #include <windows.h> using namespace std; typedef vector <string> vFileNames; bool GetFileNames(string , string , vFileNames*); void ShowFileNames(vFileNames); int main() { vFileNames FileNames; string rta, ext; int opt; cout << "Unidad + ruta (Ej: C:\\\\CARPETA\\\\): "; cin >> rta; cout << endl << "Extension del archivo (Ej: *.TXT): "; cin >> ext; if (GetFileNames(rta, ext, &FileNames)) do { ShowFileNames(FileNames); cout << "Seleccione un numero 0-" << FileNames.size()-1 <<" (-1 termina)"; cin >> opt; if (opt > -1) cout << endl << "Su eleccion: " << FileNames[opt] << endl << endl; } while (opt != -1); else cout << "No se encontraron archivos"; return 0; } bool GetFileNames(string Ruta, string Ext, vFileNames *v) { WIN32_FIND_DATA FindFileData; HANDLE hFind = FindFirstFile(((string)Ruta+Ext).c_str(), &FindFileData); if (hFind == INVALID_HANDLE_VALUE) return false; do (*v).push_back(FindFileData.cFileName); while (FindNextFile(hFind, &FindFileData)); FindClose(hFind); return true; } void ShowFileNames(vFileNames v) { for(unsigned i = 0; i < v.size(); i++) cout << i << ".- " << v[i] << endl; }
Saludos :)
Título: Re: [C++] Uso de <vector>
Publicado por: MeCraniDOS en 24 Junio 2013, 22:59 pm
Tal vez este código muy básico te pueda servir de guía:
Si, me sirve de mucho, gracias por molestarte ;-) ;-)
SaludosEditado
Otra cosa, he adaptado tu código a lo que necesitaba, me ha quedado algo asíbool Listar_Archivos() { vFileNames FileNames; string rta, ext; int opt; rta = ""; ext = "*.txt"; if (GetFileNames(rta, ext, &FileNames)) { ShowFileNames(FileNames); cout << "\n Selecciona un archivo (0-" << FileNames.size()-1 << ") "; cin >> opt; cout << endl << " Procesando " << FileNames[opt] << endl; return true; } else { return false; } }
Pero tengo este problema, tengo este otro código #include <iostream> #include <fstream> #include <string> #include <cctype> #include <io.h> #include <vector> #include <windows.h> using namespace std; typedef vector <string> vFileNames; bool GetFileNames(string , string , vFileNames*); void ShowFileNames(vFileNames); bool Listar_Archivos(); bool Leer_Archivo(string Nombre); int main() { char Letra; string Nombre_Archivo_Vacio; //Variable para el archivo a leer if (!Listar_Archivos()) { cout<<" No se encontraron archivos!"; cin.get(); // Pausa return -1; // Finaliza el programa con error } if(!Leer_Archivo(Nombre_Archivo_Vacio)) //Se envia la variable "Nombre_Archivo_Vacio" a la funcion "Leer_Archivo" { printf("\n [+] Desea intentar repetir la operacion? (S/N) "); cin>>Letra; } [...] }
Lo que quiero es usar el archivo seleccionado de la función Listar_Archivos en la función Leer_Archivo, pero no se como pasar ese dato de una función a otra :-\ :-\
Saludos
Título: Re: [C++] Uso de <vector>
Publicado por: amchacon en 25 Junio 2013, 15:57 pm
Lo que quiero es usar el archivo seleccionado de la función Listar_Archivos en la función Leer_Archivo, pero no se como pasar ese dato de una función a otra :-\ :-\
Saludos
Simplemente pasa ese nombre: cout << endl << " Procesando " << FileNames[opt] << endl;
Título: Re: [C++] Uso de <vector>
Publicado por: MeCraniDOS en 25 Junio 2013, 16:15 pm
Simplemente pasa ese nombre: cout << endl << " Procesando " << FileNames[opt] << endl;
El problema es que no se como pasarlo TT
Si alguien me puede decir como hacerlo.. :-\ :-\
Título: Re: [C++] Uso de <vector>
Publicado por: ecfisa en 25 Junio 2013, 19:28 pm
Hola MeCraniDOS. A ver si en líneas generales entendí lo que buscas... #include<iostream> #include<fstream> #include <vector> #include <string> #include <windows.h> using namespace std; typedef vector <string> vFileNames; bool GetFileNames(string Ruta, string Ext, vFileNames &v); void ShowFileNames(vFileNames v); string Listar_Archivos(); void Leer_Archivo(string aFileName); int main() { char Letra = 'S'; string Nombre_Archivo; //Variable para el archivo a leer while (Letra == 'S') { Nombre_Archivo = Listar_Archivos(); if (Nombre_Archivo.empty()) { cout<<" No se encontraron archivos!"; cin.get(); // Pausa return -1; // Finaliza el programa con error } Leer_Archivo(Nombre_Archivo); cout <<"Desea intentar repetir la operacion? (S/N)"; cin >> Letra; } } bool GetFileNames(string Ruta, string Ext, vFileNames &v) { WIN32_FIND_DATA FindFileData; HANDLE hFind = FindFirstFile(((string)Ruta+Ext).c_str(), &FindFileData); if (hFind == INVALID_HANDLE_VALUE) return false; do v.push_back(Ruta+FindFileData.cFileName); while (FindNextFile(hFind, &FindFileData)); FindClose(hFind); return true; } void ShowFileNames(vFileNames v) { for(unsigned i = 0; i < v.size(); i++) cout << i << ".- " << v[i] << endl; } string Listar_Archivos() { vFileNames FileNames; string rta= "C:\\", ext="*.txt"; int opt; if (GetFileNames(rta, ext, FileNames)) { ShowFileNames(FileNames); cout << "\n Selecciona un archivo (0-" << FileNames.size()-1 << ") "; cin >> opt; cout << endl << " Procesando " << FileNames[opt] << endl; return FileNames[opt]; } else return ""; } void Leer_Archivo(string aFileName) { string line; ifstream arch(aFileName.c_str(), ifstream::in); if (arch.is_open()) { while (arch.good()) { getline (arch,line); cout << line << endl; } arch.close(); } }
Saludos :)
Título: Re: [C++] Uso de <vector>
Publicado por: MeCraniDOS en 26 Junio 2013, 11:09 am
A ver si en líneas generales entendí lo que buscas...
Listo, perfecto, gracias por la ayuda ;-) ;-)
|