Pascal/Turbo Pascal - archivo de texto, URGENTE !!!

 
Vista:
sin imagen de perfil

archivo de texto, URGENTE !!!

Publicado por daicy (13 intervenciones) el 22/04/2014 19:41:48
hola cordial saludo ,tengo un recuperativo de archivos de texto, me referencio un amigo a este foro, espero puedan ayudarme.

especialmente me cuenta que el compañero ramon da una ayuda excelente en codigo, agradezco su intervencion a mi ayuda y gracias anticipadas.

dado un fichero con indice referente a autos

autos.txt

alfaromeo 2222BJT negro
audi 3333GBV blanco
kia 4444GXD rojo

si su clave de busqueda es matricula, realizar el fichero invertido por el descriptor color, osea el nuevo fichero resultante sera:


negro 2222 BJT alfa romeo
blanco 3333 GBV audi
rojo 4444 GXD kia


el ejercicio no se trata de listas enlazadas ni nada de esos temas que aun no he visto,solo es un tema de ficheros de texto


se dene tener en cuenta las siguientes aproximaciones o pautas dadas por el profesor :


1.- Crear un programa que lea todo el contenido del fichero "autos.txt" y vaya volcando cada línea a un fichero "autos2.txt".

2.- Amplíarlo de modo que permita guardar las líneas de ese fichero en un "array de strings" y lo que vuelque al fichero "autos2.txt" sea el contenido del array invertido (de la última línea a la primera).

3.- Ordena alfabéticamente el contenido del fichero y volcarlo ordenado (como todavía son líneas de texto, posiblemente se obtendra el mismo orden que en el fichero original; se puede desordenar el fichero para comprobar que esta ordenando correctamente).

4.- Leer el fichero y guárdalo en un array de "records", en vez de un "array de strings". Al volcar al fichero "autos2.txt", escribe los campos en orden distinto: color - matricula - marca


espero por favor su ayuda
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

archivo de texto, URGENTE !!!

Publicado por Diego (98 intervenciones) el 23/04/2014 20:42:44
Me parece que está un poco complicado usar vectores al no saber la dimensión que estos deben tener; ya que si no me equivoco las únicas variables que admite dentro de la declaración de la dimensión son de tipo constante, y como sabrás esta no se puede modificar a lo largo del programa

La única manera que veo de usar un arreglo es saber cual es el máximo de lineas que puede haber en el .txt
siendo así si se podría realizar. de lo contrario no creo que se peuda realizar. Aunque puedo equivocarme, de ser así expliquenmelo para poder comprenderlo bien.
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

archivo de texto, URGENTE !!!

Publicado por daicy (13 intervenciones) el 23/04/2014 23:55:46
diego gracias por respòpnder, la cuestion es que los lineamientos de solucion los da el profesor en los items:
se dene tener en cuenta las siguientes aproximaciones o pautas dadas por el profesor :


1.- Crear un programa que lea todo el contenido del fichero "autos.txt" y vaya volcando cada línea a un fichero "autos2.txt".

2.- Amplíarlo de modo que permita guardar las líneas de ese fichero en un "array de strings" y lo que vuelque al fichero "autos2.txt" sea el contenido del array invertido (de la última línea a la primera).

3.- Ordena alfabéticamente el contenido del fichero y volcarlo ordenado (como todavía son líneas de texto, posiblemente se obtendra el mismo orden que en el fichero original; se puede desordenar el fichero para comprobar que esta ordenando correctamente).

4.- Leer el fichero y guárdalo en un array de "records", en vez de un "array de strings". Al volcar al fichero "autos2.txt", escribe los campos en orden distinto: color - matricula - marca

gracias a todos por la ayuda que me ofrezcan
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

archivo de texto, URGENTE !!!

Publicado por Diego (98 intervenciones) el 24/04/2014 01:32:07
Sí, leyendo todo eso no veo una precondición que indiquen cuantas lineas puede tener el txt del cual se saca la imformación y debido a eso no se puede declarar el tipo arreglo ya que siempre se estaría cruzando los dedos para que la cantidad de lineas no supere el máximo de elementos del vector, eso sin mencionar la capacidad que puede manejar un arreglo en pascal;. {claro está todo esto sin trabjar con listas ni otras estructuras dinamicas}

Te dos ejemplo de como se puede y no pascal:
se puede:
--const
-----num = 5;
--type
---arreglo = array [1..num] of string; {se puede ya que el valor 1 y num son del tipo constante}
esta declaración del type puede ser global o solo aplicada en el modulo.

no se puede:
--var
----num : longword;
--type
----arreglo := array [1..num] of string;
esto no se puede hacer ya sea una variable global o local incida que su valor puede ser modificado por lo tanto pascal lo detecta como un valor que no es constante y no te deja compilar debidoa ese error:
Esto lo hace ya que si num cambiara su valor durante la ejecucion del programa eso haria que la dimension del vector se aterara y a pascal no le importa si no tenes intención de cambiar su valor, ante una posibilidad de modificación ya lo detecta como un error.


Por eso es que digo que si no se sabe la cantidad de lineas que puede haber como máximo no se puede declarar el array.
Puede que no haya sido clara mi explicación, de ser así lo reformularé.

Aunque si el fichero a cargar es auto.txt exactamente como lo tenés escrito en entonces si se podría hacer ya que solo tiene 3 lineas y el arreglo seria: array [1..3] of string;
caso contrario persisto con lo escrito arriba.
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

archivo de texto, URGENTE !!!

Publicado por daicy (13 intervenciones) el 24/04/2014 10:52:58
hola diego, efectivamente le pregunte al profesor y me dijo lo que tu igualmente dices:
el fichero a cargar es auto.txt exactamente como lo tenés escrito en entonces si se podría hacer ya que solo tiene 3 lineas y el arreglo seria: array [1..3] of string;
dijo que con una declaracion tal cual la tienes se debe desarrollar el ejercicio, asi que por favor a partir de ahi espero me ayudes con tu solucion al mismo , muchas gracias.Me urge para estudiar y ver prototipo de solucion para este tipo de ejercicios.gracias de antemano.
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

archivo de texto, URGENTE !!!

Publicado por Diego (98 intervenciones) el 24/04/2014 19:32:46
Pro esas casualidades de la vida estaba leyendo la función move, y descrubrí que al parecer hay una declaración de arreglo dinamicos, es: array of tipo_de_dato; en la cual no se indica el rango, pero su manejo es atravez de punteros.
Solo comentaba, parece que me equivoqué en suponer que había una única forma de declarar un arreglo.
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

archivo de texto, URGENTE !!!

Publicado por ramon (2158 intervenciones) el 24/04/2014 13:28:47
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
{A qui tienes unos ejemplos que te ayudaran si necesitas mas lineas aumenta max y pon las lineas en la constante}
 
 program fichero;
  uses
    crt;
  const
      max = 3;
      textoinicio : array[1..max] of string[50] = (
      'alfaromeo 2222BJT negro',
      'audi 3333GBV blanco',
      'kia 4444GXD rojo');
 
     nombre = 'autos.txt';
     nombre2 = 'autos2.txt';
   type
      datotexto = record
           marca : string[15];
           matri : string[12];
           color : string[10];
         end;
 
  var
    fd,f : text;
    linea : string[50];
    texto : array[1..max] of string[50];
    tomados : longint;
    x, d : integer;
    regtexto : array[1..max] of datotexto;
    clav : string[20];
 
  procedure guardadatos;
  var
    t : integer;
  begin
     assign(f,nombre);
     rewrite(f);
     writeln(f,textoinicio[1]);
     close(f);
     for t := 2 to max do
     begin
     append(f);
     writeln(f,textoinicio[t]);
     close(f);
     end;
  end;
 
  procedure tomadatos(cual : string);
  var
    i : integer;
  begin
      tomados := 0;
      assign(f,cual);
   {$I-} reset(f); {$I+}
   if ioresult <> 0 then
   begin
   writeln('  Error De Archivo No Encontrado Pulse Una Tecla');
   readkey;
   end
  else
     begin
         i := 1;
         while not eof(f) do
         begin
            readln(f,texto[i]);
            i := i + 1;
         end;
         close(f);
         tomados := i - 1;
     end;
   end;
 
   procedure copyadefichero;
   begin
      assign(f,nombre);
    {$I-} reset(f); {$I+}
      if ioresult <> 0 then
      begin
          writeln('  Error De Archivo No Encontrado Pulse Una Tecla');
          readkey;
      end
    else
       begin
        while not eof(f) do
        begin
          readln(f,linea);
         assign(fd,nombre2);
      {$I-} reset(fd); {$I+}
      if ioresult <> 0 then
      begin
         rewrite(fd);
         writeln(fd,linea);
         close(fd);
      end
   else
       begin
          append(fd);
          writeln(fd,linea);
          close(fd);
       end;
      end;
      close(f);
     end;
   end;
 
   procedure invertido;
   var
     z, v : integer;
   begin
      assign(f,nombre);
    {$I-} reset(f); {$I+}
      if ioresult <> 0 then
      begin
          writeln('  Error De Archivo No Encontrado Pulse Una Tecla');
          readkey;
      end
    else
       begin
        v := 1;
        while not eof(f) do
        begin
          readln(f,texto[v]);
          v := v + 1;
        end;
         close(f);
         for z := v - 1 downto 1 do
         begin
         if z = v - 1 then
         begin
            assign(fd,nombre2);
            rewrite(fd);
            writeln(fd,texto[z]);
            close(fd);
          end
        else
          begin
           assign(fd,nombre2);
          append(fd);
          writeln(fd,texto[z]);
          close(fd);
       end;
     end;
   end;
  end;
 
  procedure borrdoarchivos;
  begin
     assign(f,nombre);
   {$I-} reset(f); {$I+}
   if ioresult = 0 then
   begin
      close(f);
      erase(f);
    end;
   assign(fd,nombre2);
   {$I-} reset(fd); {$I+}
   if ioresult = 0 then
   begin
      close(fd);
      erase(fd);
    end;
  end;
 
  procedure presentadatos(nm : string);
  var
    tr : integer;
  begin
     tomadatos(nm);
     writeln;
     for tr := 1 to max do
     writeln(texto[tr]);
     writeln('  Pulse Una Tecla');
     readkey;
  end;
 
  procedure ordenaarchivo(nv : string);
  var
     tempo : array[1..max] of string[50];
     c, z : integer;
     tep : string[50];
  begin
     tomadatos(nv);
     for x := 1 to max do
     tempo[x] := texto[x];
    for c := 1 to max do
      for z := max downto c + 1 do
      if tempo[c] > tempo[z] then
      begin
         tep := tempo[z];
         tempo[z] := tempo[c];
         tempo[c] := tep;
      end;
     for x := 1 to max do
     writeln(tempo[x]);
     writeln;
     readkey;
  end;
 
  procedure guardaenregistro(nom : string);
  var
    pl, v, tt : integer;
    paso : integer;
  begin
      tomadatos(nom);
      pl := 1;
      paso := 1;
      for v := 1 to max do
      begin
        for tt := 1 to length(texto[v]) do
        begin
        if texto[v][tt] <> ' ' then
      begin
     case paso of
  1 : begin regtexto[v].marca[pl] := texto[v][tt];
            regtexto[v].marca[0] := chr(pl); end;
  2 : begin regtexto[v].matri[pl] := texto[v][tt];
            regtexto[v].matri[0] := chr(pl); end;
  3 : begin regtexto[v].color[pl] := texto[v][tt];
            regtexto[v].color[0] := chr(pl); end;
     end;
        pl := pl + 1;
    end
  else
     begin
        pl := 1;
        paso := paso + 1;
     end;
    end;
      paso := 1;
      pl := 1;
    end;
  end;
 
   procedure invertirporclave(clave : string);
   var
     cc : integer;
   begin
      for cc := 1 to length(clave) do
      clave[cc] := upcase(clave[cc]);
      if clave = 'MATRICULA' then
      begin
         x := 1;
         guardaenregistro(nombre);
         assign(fd,nombre2);
         rewrite(fd);
         writeln(fd,regtexto[x].color + ' ' + regtexto[x].matri + ' ' +
                         regtexto[x].marca);
         close(fd);
         for x := 2 to max do
         begin
             assign(fd,nombre2);
             append(fd);
           writeln(fd,regtexto[x].color + ' ' + regtexto[x].matri + ' ' +
                         regtexto[x].marca);
           close(fd);
         end;
      end;
   end;
 
 
  begin
      borrdoarchivos;
      clrscr;
      guardadatos;
      tomadatos(nombre);
      writeln('  Datos Guardados');
      writeln;
      presentadatos(nombre);
      copyadefichero;
      tomadatos(nombre2);
      writeln;
      writeln('  Datos Copiados ');
      presentadatos(nombre2);
      invertido;
      tomadatos(nombre2);
      writeln;
      writeln('  Datos Invertidos ');
      presentadatos(nombre2);
      writeln;
      writeln(' Archivos Ordenados');
      ordenaarchivo(nombre);
      guardaenregistro(nombre);
      writeln;
       writeln('  Archivo Invertido ');
       writeln;
        for x := 1 to max do
        begin
        writeln(regtexto[x].color,' ',regtexto[x].matri,' ',regtexto[x].marca);
        end;
        writeln;
        write('  Entre Clave : ');
        readln(clav);
        invertirporclave(clav);
        writeln;
        writeln('  Archivo invertido');
        writeln;
        presentadatos(nombre2);
  end.
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

archivo de texto, URGENTE !!!

Publicado por daicy (13 intervenciones) el 25/04/2014 14:17:13
Hola Ramon, ante todo gracias como siempre. permiteme hacerte unas preguntas al respecto:
1-porque se debe volcar el fichero autos.txt a otro archivo, es decir por que se debe hacer el : procedure copyadefichero;
2- por que a para que utilizas la variable: texto : array[1..max] of string[50];
3- esto es una matriz : texto[v][tt] por que separas los indices asi cuando lo tradicional no deberia ser texto[v,tt], es lo mismo o que diferencia hay??'
4- que hacen las variables p1 y paso ?

disculpa mis 4 dudad pero es importante para entender la solucion, muchas gracias ramon
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

archivo de texto, URGENTE !!!

Publicado por ramon (2158 intervenciones) el 26/04/2014 01:45:28
{Tu lo pones}

1.- Crear un programa que lea todo el contenido del fichero "autos.txt" y vaya volcando cada línea a un fichero "autos2.txt".
2 -para cargar las lineas y poder manejar las como se necesite.
3 - fíjate que lo que leo es la cadena o sea el string que compone el array.
el array solo es un estring de x longitud para poder leer cada posición tiene que ser así.
4- paso marca la composición del string para pasarlo a registro al lugar que corresponda.
pi es el marcador de lectura del estring para poder entrar lo al del registro y marcar su longitud.

se necesitas mas aclaraciones dímelo se trata de ayudar y esto ayuda suerte.
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