Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-03-2011
rebufo rebufo is offline
Registrado
NULL
 
Registrado: mar 2011
Posts: 5
Poder: 0
rebufo Va por buen camino
Crear matriz

Hola a todos.
Soy nuevo en esto de la programación con Delphi y quisiera saber cómo puedo hacer para buscar una palabra en un documento de texto y crear una matriz con los datos vinculados a esta palabra.
Me explico. Tengo un documento de texto con este formato:
…..
[REPORT]
Status No
Summary No

[OPTIONS]
Units LPS
Headloss D-W
Specific Gravity 1.0

[COORDENADAS]
;ID Coord X Coord Y
10 20 70
11 30 70
12 50 70
13 70 70
21 30 40

[VERTICES]
;ID Línea Coord X Coord Y
…….
Quisiera que leer el campo [COORDENADAS] y crear una matriz con los datos ID, Coord X y Coord Y en columnas independientes, para posteriormente dibujar unos puntos en pantalla con las coordenadas que se indican.
Un saludo y mil gracias.
Responder Con Cita
  #2  
Antiguo 28-03-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.478
Poder: 21
newtron Va camino a la fama
Hola.

De la manera que estás planteando el asunto te va a resultar un poco complicado extraer la información.

Yo te aconsejaría plantear el fichero de esta forma:

[GRUPOS]
Grupo1=Report
Grupo2=Options
etc

[REPORT]
Parametro1=Status No
Parametro2=
Summary No

[OPTIONS]
Parametro1=
Units LPS
Parametro2=Headloss D-W
Parametro3=Specific Gravity 1.0
etc

de esta manera lo que consigues por un lado es poder leer de una forma sencilla y con un bucle los grupos que vas a tener y dentro de cada grupo los parámetros de cada uno de ellos usando la instrucción ReadString para leer ficheros .ini, si no sabes como hacerlo me lo comentas y te preparo un ejemplo sencillo.

Saludos
Responder Con Cita
  #3  
Antiguo 28-03-2011
rebufo rebufo is offline
Registrado
NULL
 
Registrado: mar 2011
Posts: 5
Poder: 0
rebufo Va por buen camino
Crear Matriz

Gracias Newton.
Creo que entiendo lo que comentas pero no sé si se puede aplicar para mi problema.
Del archivo de texto inicial únicamente necesito los datos del campo [coordenadas] y el resto son datos que no necesito para nada.
Además el archivo original puede temer un número de líneas variable, por lo que mi idea es decirle al programa que abra el archivo .txt donde se encuentran toda la información, que busque el campo [coordenadas] (independientemente de la posición en la que se encuentre) y que me cree una matriz (o vectores) con cada una de los subcampos ID linea , Coord X y Coord Y.
Después le daría otra orden para que a partir de los datos de esa matriz me dibujara los puntos con sus coordenadas x e y.
Mil gracias de nuevo y un saludo
Responder Con Cita
  #4  
Antiguo 28-03-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola rebufo.

Si el documento siempre respeta el orden que mostras en tu mensaje, podrías armar la matriz de este modo:
Código Delphi [-]
type
  TMatriz = array[1..3, 1..100] of integer;  // 100 o el nro máximo de líneas esperado
  ...

implementation

procedure ObtenerValores(var Matriz: TMatriz; var Tope: Integer);
var
  F: TextFile;
  s: string;
  ts: TStrings;
  fil,col: Integer;
begin
  AssignFile(F,'C:\TU_ARCHIVO.TXT');
  Reset(F);
  while not Eof(F) and (s <> '[COORDENADAS]') do  
    ReadLn(F, s); // saltar irrelevantes
  Readln(F,s);    // saltar línea: ";ID Coord X Coord Y"
  fil:= 1;
  while not Eof(F) and (s <> '[VERTICES]') do // o (s <> '') si hay linea en blanco al fin de la serie
  begin
    Readln(F,s);
    try
     ts:= TStringList.Create;
     ts.Clear;
     ts.Delimiter:= ' ';
     ts.DelimitedText:= s;
     for col:= 0 to ts.Count-1 do
       Matriz[col+1, fil]:= StrToInt(ts[col]);
    finally
     ts.Free;
    end;
    Inc(fil);
  end;
  Tope:= fil -1;
  CloseFile(F);
end;
...

Ejemplo de llamada:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  mt: TMatriz;
  t,i: Integer;
begin
  ObtenerValores(mt, t);
  for i:= 1 to t do
    Memo1.Lines.Add(IntToStr(mt[1,i])+'-'+IntToStr(mt[2,i])+'-'+IntToStr(mt[3,i]));
end;

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 28-03-2011 a las 14:12:41.
Responder Con Cita
  #5  
Antiguo 28-03-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.478
Poder: 21
newtron Va camino a la fama
Ok, te he preparado un ejemplo de como lo puedes hacer

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  Fichero: TextFile;
  Id,X,Y: SmallInt;
  sLinea: String;
  iCoordenadas: array of array of SmallInt;
begin
  AssignFile(Fichero,'D:\Temp\Fichero.txt');
  Reset(Fichero);
  While not Eof(Fichero) do begin
    ReadLn(Fichero,sLinea);
    if sLinea='[COORDENADAS]' then begin
      ReadLn(Fichero,sLinea); // Nos saltamos la linea ;ID Coord X Coord Y
      while true do begin
        ReadLn(Fichero,sLinea);
        try
          Id:=StrToInt(Copy(sLinea,1,2));
          x :=StrToInt(Copy(sLinea,4,2));
          y :=StrToInt(Copy(sLinea,7,2));
          SetLength(iCoordenadas,Length(iCoordenadas)+1,3);
          iCoordenadas[Length(iCoordenadas)-1,0]:=Id;
          iCoordenadas[Length(iCoordenadas)-1,1]:=x;
          iCoordenadas[Length(iCoordenadas)-1,2]:=y;
        except
          // Entiendo que cuando de error han acabado las coordenadas
          break;
        end;
      end;
    end;
    if Length(iCoordenadas)>0 then break; // Entiendo que ya ha cogido las coordenadas y me salgo
  end;
  CloseFile(Fichero);
  // Aquí ya tienes las coordenadas en la matriz iCoordenadas y puedes continuar...

end;

Espero que te sirva.
Saludos

P.D. El amigo ecfisa se me ha adelantado jejejee
Responder Con Cita
  #6  
Antiguo 28-03-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por newtron Ver Mensaje
P.D. El amigo ecfisa se me ha adelantado jejejee
Si, pero tu código me gusta mas...

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 28-03-2011
rebufo rebufo is offline
Registrado
NULL
 
Registrado: mar 2011
Posts: 5
Poder: 0
rebufo Va por buen camino
Si señores

Bueno, Bueno no os peleeis, los dos codigos me gustan mucho.
La verdad es que me parece impresionante como funciona este foro. Enhorabuena por la parte que os toca.
Lo que yo llevo "rayandome" dos semanas, me lo habeis solucionado en 2 horas. Ahora me toca a mi seguir rayandome para terminar el programa.
Pena que no estais en A Coruña para invitaros a unas cervecitas.
Mil gracias a los dos.
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
Matriz dinamica BC++ C++ Builder 7 24-10-2011 19:04:29
cargar matriz corvarod Varios 2 09-03-2009 18:35:42
¿Proyecto Matriz? egostar La Taberna 6 02-10-2008 20:40:26
matriz editable jsanchez OOP 11 20-01-2006 15:28:41
matriz 3 dimensiones Lidia SQL 2 12-12-2005 18:59:58


La franja horaria es GMT +2. Ahora son las 15:02: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