Página 1 de 2
Dificuldade com arquivo INI
Enviado: 09 Dez 2021 16:09
por leandrolinauer
Boa tarde a todos.
Estou com uma certa dificuldade com arquivos .INI, segue abaixo o que preciso fazer.
Código: Selecionar todos
If NewMyPrinters(.T.) //minha função que pega o nome da impressora
iRead :=HB_ReadIni("CONFIG_MAQ.INI" ) //configuração da maquina, individual para cada maquina contendo abaixo a linha que necessito.
/// linha do config_maq.ini
///[Impressora_folha]
///HP Laserjet Professional M1212nf MFP=29
//cPrinter = guarda o nome da impressora retornado pela funcao newmyprinters() = "HP Laserjet Professional M1212nf MFP"
i_PRINTER:=iRead["Impressora_folha"][cPrinter] //aqui o problema, preciso passar o nome da impressora para pegar o valor = 29
//Exatamente assim abaixo que da certinho, mas não na variavel cPrinter:
// i_PRINTER:=iRead["Impressora_folha"]["HP Laserjet Professional M1212nf MFP"] //aqui o problema, preciso passar o nome da impressora para pegar o valor = 29
EndIf
Pergunto, como passo para ler o arquivo ini com o nome da impressora dentro da variavel, já tentei e da erro.
"cPrinter"
"&cPrinter"
&cPrinter.
(cPrinter)
' " '+cPrinter+' " "
' " '+(cPrinter)+' " "
Como não trabalho com INI, só o básico e neste eu não consegui.
Se alguem puder me passar como se faz com variavel, fico grato.
Atenciosamente
Leandro
Dificuldade com arquivo INI
Enviado: 09 Dez 2021 16:37
por Jairo Maia
Tente mudar essa linha:
Para essa forma:
Se ainda não funcionar, tente dessa forma:
Veja se dá certo.
Dificuldade com arquivo INI
Enviado: 09 Dez 2021 17:23
por leandrolinauer
Boa tarde Jairo.
O primeiro modo da erro de compilação
O segundo modo da erro de execução
Erro: Descrição..........: Bound error
Persiste a dúvida.
Dificuldade com arquivo INI
Enviado: 09 Dez 2021 17:55
por Jairo Maia
Ok. Estou pressupondo que cPrinter seja uma variável Private que é definida na função NewMyPrinters(.T.), é isso? Tem certeza que cPrinter está retornando com o nome da impressora e não como NIL?
Se houver dúvida, abaixo da chamada de NewMyPrinters(.T.) coloque o seguinte:
Isso vai mostrar exatamente o que tem em cPrinter. Se quiser, faça esse teste, estou achando que cPrinter não está retornando correto então.
Dificuldade com arquivo INI
Enviado: 09 Dez 2021 18:22
por Vlademiro
Olá. Analisa o formato do hash retornado através da função hb_valtoexp.
? Hb_valtoexp( iRead )
Dificuldade com arquivo INI
Enviado: 10 Dez 2021 11:27
por leandrolinauer
Bom dia Jairo
"
Ok. Estou pressupondo que cPrinter seja uma variável Private que é definida na função NewMyPrinters(.T.), é isso? Tem certeza que cPrinter está retornando com o nome da impressora e não como NIL?
"
Sim, é uma variavel publica no inicio do programa para ver qual o nome da impressora.
Sim, esta variavel esta sendo manipulada pela Myprinter() e retorna com o nome, já visualizei ela certinho antes de passar para para o INI.
Respondendo do Vlademiro tbem aqui.
a Variavel cPrinter vem com o conteudo certinho "HP Laserjet Professional M1212nf MFP"
Quando passo escrito o nome i_PRINTER:=iRead["Impressora_folha"]["HP Laserjet Professional M1212nf MFP"] da certinho pega o valor no arquivo ini "29"
Quando passo a variavel i_PRINTER:=iRead["Impressora_folha"][cPrinter] //da bond error
O problema é como passar em variavel para ler arquivo INI.
Grato
Dificuldade com arquivo INI
Enviado: 10 Dez 2021 18:10
por JoséQuintas
Faça uma comparação entre a string digitada e a retornada.
Pode ter alguma "letrinha" diferente que está passando.
Código: Selecionar todos
#define NOME_TESTE "HP Laserjet..."
IF ! cPrinter == NOME_TESTE
? "alerta e mostrar"
ENDIF
Outro dia tinha uma letra diferente aqui, e deu trabalho pra perceber.
NÃO se esqueça que a != b não é o mesmo que ! a == b, que não é o mesmo que ! a = b
Dificuldade com arquivo INI
Enviado: 11 Dez 2021 10:47
por leandrolinauer
Bom dia a todos
Achei uma função no fórum e adaptei ela pra mim, segue abaixo ela.
Código: Selecionar todos
FUNCTION Retorna_INI(cArq, cSecao, cKey)
Local hIni := hb_IniRead(cArq)
Local aSecao:= hIni[cSecao]
Return aSecao[cKey]
Código: Selecionar todos
//notem que o conteudo da variável abaixo é o mesmo na linha que funciona escrito o nome, já na variavel não funciona
oEnvCPrinter:='HP Laserjet Professional M1212nf MFP'
oMxPaper:=Val(Retona_INI( wD_IniExe+'CONFIG_MAQ.INI','Impressora_folha','HP Laserjet Professional M1212nf MFP')) //assim funciona
oMxPaper:=Val(Retona_INI( wD_IniExe+'CONFIG_MAQ.INI','Impressora_folha',&oEnvCPrinter.)) //assim não
oMxPaper:=Val(Retona_INI( wD_IniExe+'CONFIG_MAQ.INI','Impressora_folha',&oEnvCPrinter)) //assim tbem não
oMxPaper:=Val(Retona_INI( wD_IniExe+'CONFIG_MAQ.INI','Impressora_folha',oEnvCPrinter)) //assim tbem não
Grato
Dificuldade com arquivo INI
Enviado: 14 Dez 2021 14:38
por leandrolinauer
Boa tarde a todos.
Alguém já passou por isto?, leitura dinâmica de um arquivo INI?
Dificuldade com arquivo INI
Enviado: 14 Dez 2021 15:56
por alxsts
Olá!
Os nomes de campos chave de uma variável do tipo hash são case sensitive. Para recuperar o valor de um elemento do hash através de sua chave, esta precisa ser escrita exatamente como foi definida na criação do hash. Verifique o conteúdo da variável cKey. Ele tem que estar exatamente igual ao que está buscando (maiúsculas e minúsculas), sem espaços ao final.
Dificuldade com arquivo INI
Enviado: 14 Dez 2021 16:17
por leandrolinauer
Boa tarde.
Meio caminho andado com a função hb_valtoexp()
Código: Selecionar todos
FUNCTION Retorna_INI(cArq, cSecao, cKey)
Local hIni := hb_IniRead(cArq)
Local aSecao:= hIni[cSecao]
hb_valtoexp( aSecao[cKey] ) //ACRESCENTANDO ESTA LINHA EU CONSIGO ENVIAR AGORA POR UMA VARIÁVEL.
Return aSecao[cKey]
Abaixo o preparo para envio em variável
Código: Selecionar todos
oEnvCPrinter:='HP Laserjet Professional M1212nf MFP'
oMxPaper:=Val(Retorna_INI( wD_IniExe+'CONFIG_MAQ.INI','Impressora_folha',oEnvCPrinter)) //AGORA FUNCIONA ENVIANDO PELA VARIAVEL
Agora continuo com problema porque não consigo enviar a variável
Código: Selecionar todos
oEnvCPrinter:=cPrinter
oMxPaper:=Val(Retorna_INI( wD_IniExe+'CONFIG_MAQ.INI','Impressora_folha',oEnvCPrinter)) //DA ERRO NA LINHA HB_VALTOEXP()
Código: Selecionar todos
oMxPaper:=Val(Retorna_INI( wD_IniExe+'CONFIG_MAQ.INI','Impressora_folha',cPrinter)) //DA ERRO NA LINHA HB_VALTOEXP()
Código: Selecionar todos
oMxPaper:=Val(Retorna_INI( wD_IniExe+'CONFIG_MAQ.INI','Impressora_folha',&cPrinter.)) //DA ERRO NA LINHA HB_VALTOEXP()
Código: Selecionar todos
oEnvCPrinter:="'"+cPrinter+"'"
oMxPaper:=Val(Retorna_INI( wD_IniExe+'CONFIG_MAQ.INI','Impressora_folha',oEnvCPrinter)) //DA ERRO NA LINHA HB_VALTOEXP()
Então continuo com o problema e tbem não entendi o porque a HB_VALTOEXP informada o conteudo dentro do programa, mas carregando não.
Grato
Um abraço a todos
Dificuldade com arquivo INI
Enviado: 14 Dez 2021 19:18
por Vlademiro
A função hb_valtoexp é para pesquisar o conteúdo de uma variável qualquer. É geralmente usada para fins de depuração, para vc ver se está tudo bem. Nesse caso essa função deve ser usada em conjunto com alguma outra para ver o retorno dela. Por exemplo:
Alert( hb_valtoexp( variável ) )
Ou então
? Hb_valtoexp( variável )
Dificuldade com arquivo INI
Enviado: 15 Dez 2021 08:34
por Jairo Maia
leandrolinauer escreveu:Meio caminho andado com a função hb_valtoexp()
Negativo! Você ainda está em briga de foice no escuro, ou seja, está "perdidinho" rs...
Vou tentar explicar algumas coisas, veja:
Você está salvando seu INI de forma errada para o que você quer. Considerando que seu objetivo é pesquisar por uma impressora e obter um valor de identificação (no caso do exemplo, o 39), veja como seria o raciocínio para salvar isso em seu INI:
Para Salvar:
Código: Selecionar todos
Function Main()
Local hSaveIni := Hash()
hSaveIni["Impressora_folha"] := Hash() // cria o grupo "Impressora_folha"
cPrinter := "HP Laserjet Professional M1212nf MFP" // define o nome da HashTag
nIdPrinter := 39 // define o conteúdo da HashTag
hSaveIni["Impressora_folha"][cPrinter] := nIdPrinter // Salva a HashTag no Ini
HB_WriteIni( "Teste.ini", hSaveIni )
Return Nil
Para Ler:
Código: Selecionar todos
Function Main()
Local hReadIni := HB_ReadIni( "Teste.ini" )
cGrupo := "Impressora_folha" // define em qual grupo pesquisar
cPrinter := "HP Laserjet Professional M1212nf MFP" // define a HashTag a pesquisar
nIdPrinter := hReadIni[cGrupo][cPrinter] // retorna o conteúdo da HashTag
hb_Alert( CStr( nIdPrinter ) ) // mostra o conteudo retornado
Return Nil
Dificuldade com arquivo INI
Enviado: 16 Dez 2021 12:22
por leandrolinauer
Bom dia.
Estou perdido mesmo, rsrsrsrs e continuo rsrsrs
Código: Selecionar todos
///cPrinter retorna o nome da impressora através da função
// hDc := WIN_PRINTDLGDC( @cPrinter, , , ) //mostra a tela de dialog do windows para escolher as impressoras instaladas e retorna o conteudo na variavel publica cprinter
// neste momento a cprinter contem o nome da impressora como abaixo
oEnvCPrinter:='HP Laserjet Professional M1212nf MFP' //DA CERTO colocando o nome diretamente
oEnvCPrinter:=cPrinter //NAO DA CERTO informando o nome da variavel preenchida
oMxPaper:=Val(Retorna_INI( wD_IniExe+'CONFIG_MAQ.INI','Impressora_folha',oEnvCPrinter))
Código: Selecionar todos
FUNCTION Retorna_INI(cArq, cSecao, cKey)
Local hIni := HB_ReadINI(cArq)
Return hIni[cSecao][cKey]
///função retorna ini é igualzinha a sua passada, só com outras variaveis.
Código: Selecionar todos
Function Main()
Local hReadIni := HB_ReadIni( "Teste.ini" ) = Local hIni := HB_ReadINI(cArq)
cGrupo := "Impressora_folha" // (PASSO na cSecao)
cPrinter := "HP Laserjet Professional M1212nf MFP" // r (PASSO na cKey)
nIdPrinter := hReadIni[cGrupo][cPrinter] // = Return hIni[cSecao][cKey]
hb_Alert( CStr( nIdPrinter ) ) // mostra o conteudo retornado
Return Nil
O problema que não funciona se eu enviar a cPrinter
Dificuldade com arquivo INI
Enviado: 16 Dez 2021 12:39
por leandrolinauer
Bom dia,
Fui dar uma olhada na cPrinter e descobri que o problema é só nela mesmo.
Esta variável publica esta com algum conteudo retornado pela WIN_PRINTDLGDC( @cPrinter, , , ) que não passa pela leitura da HASH
Problema, não sei consertar isto, visto que o conteudo dela é visto no sistema certinho e lido sem problema, mas já na HASH da erro.
alguem sabe qual é o formato de retorno da WIN_PRINTDLGDC( @cPrinter, , , )
Pra mim ela retorna uma string caracter tanto que mostro ela no sistema na mensagem e ela é igualzinha se tivesse sido preenchida com o conteudo
Assim:
Código: Selecionar todos
cPrinter:='HP Laserjet Professional M1212nf MFP'
WIN_PRINTDLGDC( @cPrinter, , , )
parece que para a HASH os conteudos acima são diferentes, mas aonde e no que?
Não descobri nada sobre isto, sou leigo em HASH, eu utilizava ela fixa como todos os exemplos na net.
Desta forma:
Agora preciso usar dinamico
Código: Selecionar todos
[Impressora_folha]
HP Laserjet Professional M1212nf MFP=29
Onde o nome da impressora antes do valor =29 é dinamico, de acordo com cada impressora instalada e por maquina,
Estou testando apenas leitura, não parti para a gravação ainda.
Grato a todos