#pragma once
#include "base_head.h"
#include "static_array.h"
#include "StrArray.h"
#define MODULO_CSV_FILE		"Ccsv_file"
typedef struct Columna_csv_file
{
	int flags;//flags
	int itex;//indice a texto
}Columna_csv_file;

typedef struct Fila_csv_file
{
	int flags;
	Cstatic_array *colum;//valor
	//metodos-----------------------
	void inicia(int incre=100)
	{
		colum = new Cstatic_array(sizeof(Columna_csv_file));
			colum->incremento=incre;
	}
	Columna_csv_file* get(int i)
	{
		return(Columna_csv_file*) colum->get(i);
	}
	Columna_csv_file* add_coun()
	{
		Columna_csv_file* c;
		colum->reserva();
		colum->n++;
		c=(Columna_csv_file*)colum->get(colum->n-1);
		c->flags=0;
		c->itex=0;
		return c;
	}
	void del()
	{
		delete(colum);
	}
}Fila_csv_file;

class C_error;
class UTILES_EXPORT Ccsv_file
{
private:
	StrArray str;
	Cstatic_array filas;
	C_error *er;
	BOOL b_er;
	int incre_col;
public:

	Ccsv_file(C_error* err=NULL);
	~Ccsv_file(void);
	//funciones-------------------------------------------------------------------
	BOOL lee( char *path,char separa=';' );
	BOOL guarda( char *path, char separa, BOOL ret_carro=TRUE );

	char* get(int fila,int col);//consigue la columna col de la fila fila
	int n();//numero de filas
	int n_col(int fil);//numero de columnas de la fila fil

	int add();//aņade una fila (da el indice de dicha fila)
	int add(int fila, char *valor);//aņade una columna a la fila
	int add(int fila, int valor);
	int add(int fila, double valor);

	BOOL set(int fila, int col, char* value);//ojo con hacer muchos cambios (la memoria no se libera)
	BOOL set(int fila, int col, int value);
	BOOL set(int fila, int col, double value);

	void borra();//borra todo
	
	//funciones auxiliares--------------------------------------------------------
private:

	Fila_csv_file* get_f(int i);
	char* busca_salto_linea( char* st );
};
