unit uarchimat;

{$mode delphi}

interface

uses
  Classes, SysUtils, matreal,uauxiliares;

type

  TMatrizMat = record
    matriz: TMatR;
    nombre: string;
  end;

  TDAOfTMatrizMat = array of TMatrizMat;

  { TArchiMat }

  TArchiMat = class
    matrices: TDAOfTMatrizMat;
    NMatrices: integer;
    constructor CreateFromArchiMat(archiMat: string);


  end;


  function getFilas(str:string):Integer;
  function getColumnas(str:string):Integer;
  function getNombre(str:string):String;


implementation


{ TArchiMat }

constructor TArchiMat.CreateFromArchiMat(archiMat: string);
var
  archi: TextFile;
  str, nombre: string;
  filas, columnas, kMatriz,kFila, kColumna: integer;

begin

  AssignFile(archi, archiMat);
  Reset(archi);
  ReadLn(archi, str); // # Created by Octave ...
  nombre:='';
  filas:=0;
  columnas:=0;
  kMatriz:=0;
  SetLength(matrices,1);

  while not EOF(archi) do
  begin

    ReadLn(archi, str); // # name: NOMBREMATRIZ
    nombre:=getNombre(str);
    ReadLn(archi, str); // # type: matrix

    ReadLn(archi, str); // # rows: FILAS
    filas := getFilas(str);

    ReadLn(archi, str); // # columns: COLUMNAS
    columnas := getColumnas(str);

    // Crear una matriz
    matrices[kMatriz].nombre:=nombre;
    matrices[kMatriz].matriz:=TMatR.Create_Init(filas,columnas);

    for kFila:=1 To filas do
    begin
      ReadLn(archi, str); // numeracos
      for kColumna:=1 to columnas do
      begin
        matrices[kMatriz].matriz.pon_e(kFila,kColumna,NextFloat(str));
      end;
    end;

    SetLength(matrices, Length(matrices) + 1);
    inc(kMatriz);
    ReadLn(archi, str); // linea vacia
    ReadLn(archi, str); // linea vacia
  end;

  NMatrices:=kMatriz;
  CloseFile(archi);
end;


function getFilas(str: string): Integer;
begin
  //# rows: FILAS
  getNextPalSep(str,' '); //str = rows: FILAS
  getNextPalSep(str,' '); //str = FILAS
  Result:=StrToInt(str);
end;

function getColumnas(str: string): Integer;
begin
  // # columns: COLUMNAS
  getNextPalSep(str,' '); //str = columns: COLUMNAS
  getNextPalSep(str,' '); //str = COLUMNAS
  Result:=StrToInt(str);
end;

function getNombre(str: string): String;
begin
  // # name: NOMBRE
  getNextPalSep(str,' '); //str = name: NOMBRE
  getNextPalSep(str,' '); //str = NOMBRE
  Result:=str;
end;



end.

