Cleiton Fidelis

Ler uma string, parecida com arquivo.ini

4 posts in this topic

Prezados,
Preciso fazer uma telinha em windev para um cliente, que leia uma String enviada pelo fornecedor, e ler linha a linha

exemplo

[MEDICAMENTO]

Descricao   = Nome do Medicamento
Fabricacao =  01/03/2020
Validade     = 01/03/2025
Lote            = 000185NB

Sei que se transformar a string em Arquivo.ini eu posso ler chave x valor pela sessão com o INIRead, mas por String, é possível ?
Pesquisei ExtractLine e usei tb o Contains , eu pego a linha, mas nao sei separar o conteúdo de uma vez, precisei fazer comparações.

ExtractString, tb nao consegui
Alguém poderia dar uma dica  de como fazer ou onde estou errando ?

 

Desde já agradeço

 

 

 

 

Share this post


Link to post
Share on other sites

Segue abaixo exemplo de código de como poderia ser feito.

sTexto is ANSI string = fLoadText("c:\local\nomedoarquivoINI") // Carrego o conteudo do arquivo INI na variavel sTexto

arrSplitGeral is array of strings = StringSplit(sTexto,CR) // separo as linhas criando um Array com elas

nPos is int 
FOR EACH sLinha OF arrSplitGeral // varro esse array analisando cada linha
	// Trace(sLinha) // se quiser mostrar na tela 
	sLinha = NoSpace(sLinha)
	IF Left(sLinha,1) = "[" THEN // se primeiro caracter for "[" entendo q é uma Sessão, no teu caso [MEDICAMENTOS]
		sSessao is string = NoCharacter(sLinha,"[]") // tiro os colchetes
		// ListAdd(LIST_Cleiton, sSessao) // no meu caso eu jogo em um ListBox as sessões
		// Armazeno num array criado previamente
		nPos = Add(arrINI) // add uma nova sessao 
		arrINI[nPos].sSessao = sSessao
	ELSE
		// se não é sessão mas o nPos maior q zero, sinal q previamente foi add uma sessão ai eu pego o conteudo dela
		IF nPos>0 THEN
			sChave is string = ExtractString(sLinha,1,"=")
			sValue is string = ExtractString(sLinha,2,"=")
			IF sChave <> ""
				// armazeno elas em um array
				nPosChave is int = Add(arrINI[nPos].arrChaves)
				arrINI[nPos].arrChaves[nPosChave].sChave = sChave
				arrINI[nPos].arrChaves[nPosChave].sValue = sValue
			END
		END
	END
END

 

Caso queira criar o array baseado em estruturas como fiz segue a declaração das variáveis q coloquei no Code inicial do projeto.

	// Estrutura pra guardar as chaves e valores dentro das sessões
	st_Chaves is Structure
		sChave is string
		sValue is string
	END
	
	// Estrutura para guardar as sessões e as chaves+valores de cada sessão
	st_INI is Structure
		sSessao is string
		arrChaves is array of st_Chaves
	END
	
	arrINI is array of st_INI // variavel global baseada na estrutura

 

1 person likes this

Share this post


Link to post
Share on other sites

Obrigado @Cassiano Fazendeiro,

Dentro de minha falta de conhecimento e limitação, eu não havia entendido por completo o uso do ExtractString()
com seu exemplo, fiz um ajuste com o ExtractLine() e parece que vai dar certo para aquilo que necessito.
Vou varrer toda String e fazer um if e preciso garantir que não exista espaço entre as linhas

nCotnador is int=1
Loop
   sConteudo is String = ExtractLIne(sStringMedicamento,nContador)
   if sConteudo=""
      break
  end 
   if left(sConteudo,1)<>"["
      sChave is string = ExtractLine(sConteudo,1,"=")     
      sValor is string = ExtractLine(sConteudo,2,"=")        

     if sChave="Descricao"  //pegar o nome do produto 
       sDescricao is string = sValor
    end 

     if sChave="Fabricacao"  //pegar a data de fabrica
        ....
    end 

     if sChave="Lote"  //pegar o lote
        ....
    end 

  end     

end     

     

Obrigado..

 

 

 

1 person likes this

Share this post


Link to post
Share on other sites

Em se tratando de arquivo INI é muito simples utilizar os comandos INIREAD e INIWRITE, da mesma forma como a maior parte das linguagens, só lembre que esses comandos apenas manipulam strings, para pegar ou gravar o valor tem de transforma-lo em string antes.

 

Att

 

1 person likes this

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now