Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Impresión
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-07-2008
Avatar de mauser1985
mauser1985 mauser1985 is offline
Miembro
 
Registrado: feb 2008
Posts: 21
Poder: 0
mauser1985 Va por buen camino
Post Necesito ayuda con el manejo de archivos usando delphi 7

Veran, estoy usando Dephi 7 y necesito ayuda con un programita que ando creando, la cuestion es la siguiente: necesito abrir el archivo desde la pc y leerlo por eso no hay problema la cuestion es que en el archivo que debo leer los datos aparecen de manera secuencial es decir aparecen varias lineas que no me interesan, el problema se me presenta porque la idea del programa es que me lea desde ciertos marcadores (en este caso se llaman *jhjjhb y *jbjb), y toda la informacion entre esos marcadores (sin incluir a los mismos) debe ir en un archivo creado desde delphi en un archivo nuevo con una extension especifica .
Ese procedimiento se repite varias veces a lo largo del archivo, para cada informacion de interes se debera crear un archivo especifico.
Si me pudieran ayudar con el codigo fuente de manera que me guie al hacer el proghrma se lo agradeceria mucho.
Si lo desean me puede escribir a mi mail mauricioa85@hotmail.com
Responder Con Cita
  #2  
Antiguo 12-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola, seria algo asi...

Código Delphi [-]

void Comenzar()
{
       TStringList ls;
       int numeroarchivo;
       char *nombrearchivo = 'nombre';

       ls = TStringList.Crear(nulo);
       ls->CargarArchivo(nombrearchivo);

       for (unsigned char i;i <= ls.items.Count - 1;i++)
       {
            if (ls[i] = marcador_inicio)
            {
                TStringList ls_g = TStringList.Create(nill);

                while !(i>ls->items.Count || ls.[++i] = marcardor_fin)
                     ls_g.Add(ls[i]);                

                ls_g.GrabaraArchivo(nombre_archivo + astring(numeroarchivo) + ext);
                ls_g.Liberar;                      
                numeroarchivo++;
            }
       }
       ls.Liberar;
}
,
mas o menos, escribo de cabeza saludos y espero que te sirva.

Última edición por coso fecha: 12-07-2008 a las 19:19:23.
Responder Con Cita
  #3  
Antiguo 12-07-2008
Avatar de mauser1985
mauser1985 mauser1985 is offline
Miembro
 
Registrado: feb 2008
Posts: 21
Poder: 0
mauser1985 Va por buen camino
Cool Gracias

Gracias por la molestia pero no termino e entender lo que me respondiste, es decir en la parte visual pienso usar un edit un opendialog y los botones que hagan falta para cargar el archivo grabado en mi pc, no entiendo que variables declarar con el codigo que me diste y que elementos visuales deberia usar..

El rchivo de mi interes es algo asi...

****
****
*****
****
*Inicio
1 25 69,4 87,9
2 4,7 85 745,89
3 65,89 9,7 47,8
4 ......................
.
.
.
.
*fin
.
.
.
Como ya explique anteriormente necesito que la info entre (*iniio y *fin) sea grabada en otro archivo con una extension especifica en la cual vayan los valores port orden de numeros sin contar los primeros.
Gracias
Responder Con Cita
  #4  
Antiguo 12-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
elementos visuales en principio ninguno, de variables (importantes aparte del contador) dos stringlist, el nombre del archivo a cargar, el numero de archivo a grabar y un string temporal. Mira, te lo pongo en pseudocodigo

Código Delphi [-]
 
funcion Grabar
{
           ls     StringList // stringlist donde cargaremos el archivo a analizar
           ls_g  StringList // stringlist que usaremos para grabar los trozos
 
           ls := TStringList.Create
           ls_g := TStringList.Create
 
           ls.LoadFromFile(nombre_de_archivo); // cargamos archivo
 
           i = 0
           num_archivo = 0
 
           mientras i menor que ls.Numero_de_lineas haz
             si ls[i] = '*inicio' entonces
             {
                  num_archivo = num_archivo + 1
                  ls_g.Clear
                  s = ls[i]
                  mientras (s diferente de '*final') y (i menor que ls.Count) haz
                  {
                      ls_g.Add(ls[i]
                      i = i + 1
                      s = ls[i]
                  }
                  ls_g.SaveToFile(nombre_archivo + inttostr(num_archivo) + '.ext');
              }
              si no i = i + 1
 
            ls_g.Libera // liberamos los objetos TStringList creados
            ls.free      //
}

Última edición por coso fecha: 12-07-2008 a las 22:58:18.
Responder Con Cita
  #5  
Antiguo 12-07-2008
Avatar de mauser1985
mauser1985 mauser1985 is offline
Miembro
 
Registrado: feb 2008
Posts: 21
Poder: 0
mauser1985 Va por buen camino
Gracias

Ok Gracias me parece que ese codigo si me ayudara pero aun tengo unos problemas pues soy novato en delphi.
No entiendo la parte de num_de_lineas y nom_archivo??? los declaro como una variable??? use un opendialog para localizar el archivo y sacar su ubicacion y escribir esta ubicacion en un edit.
Gracias
Responder Con Cita
  #6  
Antiguo 12-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
num de lineas es el numero de lineas que hay en el stringlist (si miras la ayuda de delphi, buscando TStringList, la propiedad count) y si, num_archivo seria para dar un nombre diferente a cada bloque que grabas. Te recomiendo que repases el codigo y lo entiendas bien. saludos
Responder Con Cita
  #7  
Antiguo 13-07-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola mauser1985, para la parte del OpenDialog debes utilizar su propiedad FileName en el cual esta toda la ruta de tu archivo que has elegido y luego abrilo en el StringGrid.

Código Delphi [-]
var
  ls    : TStringList; // stringlist donde cargaremos el archivo a analizar
  ls_g : TStringList; // stringlist que usaremos para grabar los trozos
  FileName : String;
begin
  ls := TStringList.Create
  ls_g := TStringList.Create
  if OpenDialog.Execute then
   begin
     FileName := OpenDialog.FileName;
 
     ls.LoadFromFile(FileName); // cargamos archivo
     
     .........................
     .........................
   end;

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #8  
Antiguo 13-07-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola de nuevo, también lo puedes hacer de esta forma, no lo estoy escribiendo de cabeza pero si de memoria.

Código Delphi [-]
var
  slFile    : TStringList; // stringlist donde cargaremos el archivo a analizar
  slFileNuevo  : TStringList; // stringlist que usaremos para grabar los trozos
  FileName   : String;
  NumeroFile : Integer; 
  flgInicio, flgFin : Boolean; //Banderitas que nos serviran para saber cuando tenemos un inicio o fin
begin
  slFile := TStringList.Create;
  slFileNuevo := TStringList.Create;
  if OpenDialog.Execute then
   begin
     FileName := OpenDialog.FileName;
 
     slFile.LoadFromFile(FileName); // cargamos archivo
     
     flgInicio := False;
     flgFin := False;
     NumeroFile := 1;
 
     for i:=0 to slFile.Count-1 do
      begin
        if slFile[i]='*Inicio' then
          flgInicio := True;
 
        if (slFile[i]='*Fin' then
          flgFin := True;  
        
        if (flgInicio=True) and (flgFin=False) then //esto lo puedes simplificar, pero es solo para que se entienda
         slFileNuevo.Add(slFile[i+1]); //añadimos en el nuevo
 
        if  flgFin=True then //grabamos en el archivo
         begin
            slFileNuevo.SaveToFile('NombreArchivo'+NumeroFile+'.txt');
            flgInicio := False;
            flgFin := False;
            Inc(NumeroFile); 
         end;//if
      end;//for
      .................
      .................         
   end;

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #9  
Antiguo 13-07-2008
Avatar de mauser1985
mauser1985 mauser1985 is offline
Miembro
 
Registrado: feb 2008
Posts: 21
Poder: 0
mauser1985 Va por buen camino
Gracias

Hola Caro de verdad que muchas gracias, con ese codigo me ayudare para terminar el programa aunque debo descifrar aun como hacer para que la primera columna de numeros no me aparesca y aun no veo el porque el ultimo marcdor (*final) aun me aparece en el archivo final
Responder Con Cita
  #10  
Antiguo 13-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola, siguiendo el codigo de Caro, el ultimo marcador te aparece porque el string que comparas es el slFile[i], mientras que el que añades es slFile[i+1]. Esta solución es buena para evitar incluir el slFile[n] = '*inicio', pero falla en la otra. Una manera de corregirlo seria continuando el loop si se encuentra algun marcador...
Código Delphi [-]
        ....
        if slFile[i]='*Inicio' then 
        begin
          flgInicio := True;
          continue;
        end;
 
        if (slFile[i]='*Fin' then
        begin
          flgFin := True;   
          continue;
        end;
        
        if (flgInicio=True) and (flgFin=False) then //esto lo puedes simplificar, pero es solo para que se entienda
         slFileNuevo.Add(slFile[i]); //añadimos en el nuevo
        ...
saludos.
Responder Con Cita
  #11  
Antiguo 13-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
lo de la primera columna puedes solucionarlo haciendo

Código Delphi [-]
 if (flgInicio=True) and (flgFin=False) then //esto lo puedes simplificar, pero es solo para que se entienda
         slFileNuevo.Add(TrimLeft(StrScan(slFile[i],' '))); //añadimos en el nuevo

si miras la ayuda de delphi, te dira que strscan te devuelve una subcadena desde una cadena a partir de encontrar un carácter (en este caso, ' '). Como incluye el carácter donde se empieza, usamos TrimLeft que elimina los espacios iniciales.

saludos, y a ver si te sirve

PD : una curiosidad, ese archivo parece de coordenadas. Para q servirá la aplicación? :?
Responder Con Cita
  #12  
Antiguo 13-07-2008
Avatar de mauser1985
mauser1985 mauser1985 is offline
Miembro
 
Registrado: feb 2008
Posts: 21
Poder: 0
mauser1985 Va por buen camino
Smile Hola

Bueno dejame chequear a ver si el programa me hace lo que espero, la aplicacion tiene el siguiente objetivo; para el uso de un programa de pre y postproceso de simulacion en aplicaciones de problemas cientificos y de ingenieria, bueno pues dicho programa necesita ciertos archivos para cargar la geometria y condiciones de un solido.
Necesito abrir leer datos y apartir de ahi, expulsar diferentes archivos desde un unico archivo que es el output de abaqus..
Responder Con Cita
  #13  
Antiguo 13-07-2008
Avatar de mauser1985
mauser1985 mauser1985 is offline
Miembro
 
Registrado: feb 2008
Posts: 21
Poder: 0
mauser1985 Va por buen camino
Buenas

Aja y que caracter debo colocar en ' '??? es que compilo y me dice que hay un error de incompatibilidades entre un sring y PAnsiChar
Responder Con Cita
  #14  
Antiguo 13-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
como te dije, pegale un repasillo a la ayuda de delphi de strscan saludos

Última edición por coso fecha: 13-07-2008 a las 14:58:09.
Responder Con Cita
  #15  
Antiguo 13-07-2008
Avatar de mauser1985
mauser1985 mauser1985 is offline
Miembro
 
Registrado: feb 2008
Posts: 21
Poder: 0
mauser1985 Va por buen camino
Post Una pregunta

Resulta que ya ando probando la interface final pero no se donde me guarda el archivo final y es extraño porque lo pruebo cargando y leyendo otros archivos y siempre me lo guarda en Mis Documentos y esta vez no se si me los lee o no, pienso que quizas es porque los datos son numeros reales, y estoy usando un stringlist pero de verdad que no se; les agradeceria si me ayudaran.
Responder Con Cita
  #16  
Antiguo 13-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
los datos son numeros reales, pero estan tratados como texto, por lo que no hay problema de usar un stringlist. En cuanto a la localización del archivo, es probable que no le hayas asignado ninguna ruta ('c:\carpeta\nombrearchivo.txt') , solo el nombre, en el momento de grabarlo (lo mas seguro que este en el mismo directorio que el ejecutable)
Responder Con Cita
  #17  
Antiguo 13-07-2008
Avatar de mauser1985
mauser1985 mauser1985 is offline
Miembro
 
Registrado: feb 2008
Posts: 21
Poder: 0
mauser1985 Va por buen camino
Post

Sr Coso no se encuentra ni en la carpeta donde esta el ejecutable ni en Mis Documentos como cuando hacia las otras pruebas
Responder Con Cita
  #18  
Antiguo 13-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
bueno, y si hace una busqueda del archivo, en que localizacion se encuentra?
Responder Con Cita
  #19  
Antiguo 13-07-2008
Avatar de mauser1985
mauser1985 mauser1985 is offline
Miembro
 
Registrado: feb 2008
Posts: 21
Poder: 0
mauser1985 Va por buen camino
Tamp'oco Sr Coso, realizo una busqueda con el nombre del archivo en toda la pc y no aparece; es extraño porque pruebo ese mismo codigo con otro archivo y si me graba perfectamente en mis documentos, cuando hago al prueba con el archivo de interes no pasa nada es como si nisiquiera lo leyera
Responder Con Cita
  #20  
Antiguo 13-07-2008
Avatar de mauser1985
mauser1985 mauser1985 is offline
Miembro
 
Registrado: feb 2008
Posts: 21
Poder: 0
mauser1985 Va por buen camino
Bueno ahora me aparece una excepcion me dice: ESTRinglist error with mesage 'List Index out of bounds (30069)'.... Me parece que el string list no tiene suficientes caracteres para abarcar todo el archivo, me equivoco??
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ayuda: Necesito refrescar la aplicación MIENTRAS se copian archivos muy grandes Black_Ocean Varios 7 10-04-2008 21:07:51
Necesito ayuda para recuperar unos archivos ddd_ddd Varios 2 24-10-2007 15:49:26
Manejo de archivos binarios en Delphi rodrigo19 Varios 6 26-05-2007 02:36:52
Necesito ayuda con indices .ndx para archivos dbf dinover7 Conexión con bases de datos 1 21-05-2007 21:41:34
Necesito ayuda para manerjar archivos meosre Varios 2 08-09-2005 18:37:34


La franja horaria es GMT +2. Ahora son las 01:35:50.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi