Dev - C++ - Ayuda con ejercicio de archivo de texto

 
Vista:
sin imagen de perfil
Val: 1
Ha aumentado su posición en 3 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Ayuda con ejercicio de archivo de texto

Publicado por Kai (2 intervenciones) el 20/03/2020 18:35:32
Muy buenas gente, este es un ejercicio de archivo de texto.
He adjuntado un archivo .rar que contiene el .txt necesario.

Basicamente necesito que al abrir este archivo, los "clasificados" esten ordenados.
Por ejemplo, todos los "Clasificacion1" juntos, y los "Clasificacion2" juntos, y asi. (hay 4)
No he logrado hacerlo. Se me muestra en orden de codigo cuando trato de hacerlo en el codigo.
Aparte de eso, necesita el total de la suma del valorizado, osea el total de todos los valorizados sumados por clasificacion. (osea la suma total de valorizados en clasi1, despues en clasi 2, y asi.)

Agradeceria ayuda.

Este es mi codigo.

Espero el formato este bien.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
 
using namespace std;
 
int main()
{
 
    string nombreArchivo="productos.txt";
    bool encontrado=false;
 
    ifstream archivo(
             nombreArchivo.data(),
             ios::in);
 
    if(!archivo)
    {
         cout << "Error.  No se pudo"
              << " abrir el archivo."
              << endl;
         system("pause");
         return -1;
    }
    int idCliente=0;
    std::string clasificacion;
    std::string str1("Clasificacion1");
    std::string str2("Clasificacion2");
    std::string str3("Clasificacion3");
    std::string str4("Clasificacion4");
    string descripcion;
    double precio;
    int cantidad;
    int total;
    int valorizado;
 
    cout << '\n'
         << setw(10) << "Codigo"
         << setw(15) << "Clasificacion"
         << setw(20) << "Descripcion"
         << setw(20) << "Precio"
         << setw(20) << "Cantidad"
         << setw(20) << "Valorizado"
         << fixed << setprecision(2)
         << endl;
    for(int i=0; i<105; i++)
        cout << '=';
 
    cout << endl;
 
    archivo >> idCliente
            >> clasificacion
            >> descripcion
            >> precio
			>> cantidad;
 
    while(!archivo.eof())
    {
    	if(str1.compare(clasificacion) == 0){
    		std::cout << setw(10) << idCliente
              << right << setw(15) << clasificacion
              << setw(20) << descripcion
              << right << setw(20) << precio
              << setw(20) << cantidad
              << right << setw(20) << (valorizado = (precio*cantidad))
              << endl;
		}
 
		if(str2.compare(clasificacion) == 0){
    		std::cout << setw(10) << idCliente
              << right << setw(15) << clasificacion
              << setw(20) << descripcion
              << right << setw(20) << precio
              << setw(20) << cantidad
              << right << setw(20) << (valorizado = (precio*cantidad))
              << endl;
		}
 
		if(str3.compare(clasificacion) == 0){
    		std::cout << setw(10) << idCliente
              << right << setw(15) << clasificacion
              << setw(20) << descripcion
              << right << setw(20) << precio
              << setw(20) << cantidad
              << right << setw(20) << (valorizado = (precio*cantidad))
              << endl;
		}
 
		if(str4.compare(clasificacion) == 0){
    		std::cout << setw(10) << idCliente
              << right << setw(15) << clasificacion
              << setw(20) << descripcion
              << right << setw(20) << precio
              << setw(20) << cantidad
              << right << setw(20) << (valorizado = (precio*cantidad))
              << endl;
		}
 
         archivo >> idCliente
                 >> clasificacion
                 >> descripcion
                 >> precio
				 >> cantidad;
    }
    archivo.close();
 
    cout << "\nOperacion finalizada"
         << " con exito.\n\n";
 
    system("pause");
    return 0;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 160
Ha aumentado 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Ayuda con ejercicio de archivo de texto

Publicado por Andrés (53 intervenciones) el 20/03/2020 21:42:37
sort -k 2 productos.txt
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con ejercicio de archivo de texto

Publicado por Kai (2 intervenciones) el 21/03/2020 03:39:55
Disculpa, no entiendo el contexto de esto, podrias elaborar?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 160
Ha aumentado 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Ayuda con ejercicio de archivo de texto

Publicado por Andrés (53 intervenciones) el 21/03/2020 06:34:22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include <cstdlib>
 
using namespace std;
 
int main() {
 
  string nombreArchivo = "prods.txt";
  bool encontrado = false;
 
  ifstream archivo(nombreArchivo.data(), ios:: in );
 
  if (!archivo) {
 
    cout << "Error.  No se pudo" <<
      " abrir el archivo." <<
      endl;
 
    system("pause");
 
    return EXIT_FAILURE;
 
  }
 
  int idCliente = 0;
  std::string clasificacion;
  std::string current_clasificacion = "";
 
  long total_valorizado = 0;
 
  string descripcion;
  double precio;
  int cantidad;
  int total;
  int valorizado;
 
  cout << '\n' <<
    setw(10) << "Codigo" <<
    setw(15) << "Clasificacion" <<
    setw(20) << "Descripcion" <<
    setw(20) << "Precio" <<
    setw(20) << "Cantidad" <<
    setw(20) << "Valorizado" <<
    fixed << setprecision(2) <<
    endl;
 
  for (int i = 0; i < 105; i++)
    cout << '=';
 
  cout << endl;
 
  archivo >> idCliente >>
    clasificacion >>
    descripcion >>
    precio >>
    cantidad;
 
  while (!archivo.eof()) {
 
    if (current_clasificacion.compare("") != 0 && current_clasificacion.compare(clasificacion) != 0) {
 
      for (int i = 0; i < 105; i++)
        cout << '-';
 
      std::cout << endl << right << setw(105) << total_valorizado << endl;
 
      total_valorizado = 0;
 
    }
 
    current_clasificacion = clasificacion;
    valorizado = precio * cantidad;
    total_valorizado += valorizado;
 
    std::cout << setw(10) << idCliente <<
      right << setw(15) << clasificacion <<
      setw(20) << descripcion <<
      right << setw(20) << precio <<
      setw(20) << cantidad <<
      right << setw(20) << valorizado <<
      endl;
 
    archivo >> idCliente >>
      clasificacion >>
      descripcion >>
      precio >>
      cantidad;
  }
 
  for (int i = 0; i < 105; i++)
    cout << '-';
 
  std::cout << endl << right << setw(105) << total_valorizado << endl;
 
  archivo.close();
 
  cout << "\nOperacion finalizada" <<
    " con exito.\n\n";
 
  system("pause");
 
  return EXIT_SUCCESS;
 
}


TO-DO:

i) refactor
ii) si problema por el sort antes => implementarlo en el código
iii) contemplar cosas locas como ordenar por una o varias columnas diferentes a Clasificación :/
iv) agregar el total del total de valorizados

output
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar