private object LerCampo(TpcnTipoCampo Tipo, TpcnResources tag, ObOp optional, int minLength, int maxLength, bool trim)
{
int nDecimais = 0;
string ConteudoTag = "";
try
{
ConteudoTag = RetornarConteudoTag(tag.ToString());
if (ConteudoTag != "")
if (ConteudoTag.StartsWith(prefix))
ConteudoTag = "";
int len = ConteudoTag.Length;
if (len == 0 && optional == ObOp.Opcional)
{
}
else
{
switch (Tipo)
{
case TpcnTipoCampo.tcHor:
maxLength = minLength = 8; //hh:mm:ss
break;
case TpcnTipoCampo.tcDatYYYY_MM_DD:
maxLength = minLength = 10; //yyyy-MM-dd
break;
case TpcnTipoCampo.tcDatYYYYMMDD:
maxLength = minLength = 8; //yyyyMMdd
break;
case TpcnTipoCampo.tcDatHor:
maxLength = minLength = 19; //aaaa-mm-dd hh:mm:ss
break;
/*
case TpcnTipoCampo.tcDec2:
nDecimais = 2;
break;
case TpcnTipoCampo.tcDec3:
nDecimais = 3;
break;
case TpcnTipoCampo.tcDec4:
nDecimais = 4;
break;
case TpcnTipoCampo.tcDec10:
nDecimais = 10;
break;*/
default:
if (Tipo >= TpcnTipoCampo.tcDec2 && Tipo <= TpcnTipoCampo.tcDec10)
nDecimais = (int)Tipo;
break;
}
if (len == 0 && minLength > 0)
{
this.cMensagemErro += "Layout: " + this.layout.Replace(prefix, "") + Environment.NewLine;
this.cMensagemErro += string.Format("Segmento [{0}]: tag <{1}> deve ser informada.\r\n" +
"\tLinha: {2}: Conteudo do segmento: {3}",
this.FSegmento, tag.ToString(), this.LinhaLida, this.Registro.Substring(1)) + Environment.NewLine;
}
else
{
switch (Tipo)
{
case TpcnTipoCampo.tcDec2:
case TpcnTipoCampo.tcDec3:
case TpcnTipoCampo.tcDec4:
case TpcnTipoCampo.tcDec5:
case TpcnTipoCampo.tcDec6:
case TpcnTipoCampo.tcDec7:
case TpcnTipoCampo.tcDec8:
case TpcnTipoCampo.tcDec9:
case TpcnTipoCampo.tcDec10:
//quando numerico do tipo double não consiste o tamanho minimo nem maximo
break;
default:
if ((len > maxLength || len < minLength) && (maxLength + minLength > 0))
{
this.cMensagemErro += "Layout: " + this.layout.Replace(prefix, "") + Environment.NewLine;
this.cMensagemErro += string.Format("Segmento [{0}]: tag <{1}> deve ter seu tamanho entre {2} e {3}. Conteudo: {4}" +
"\r\n\tLinha: {5}: Conteudo do segmento: {6}",
this.FSegmento, tag.ToString(), minLength, maxLength, ConteudoTag, this.LinhaLida, this.Registro.Substring(1)) + Environment.NewLine;
}
break;
}
}
}
if (optional == ObOp.Obrigatorio || (optional == ObOp.Opcional && len != 0))
{
switch (Tipo)
{
case TpcnTipoCampo.tcDec2:
case TpcnTipoCampo.tcDec3:
case TpcnTipoCampo.tcDec4:
case TpcnTipoCampo.tcDec5:
case TpcnTipoCampo.tcDec6:
case TpcnTipoCampo.tcDec7:
case TpcnTipoCampo.tcDec8:
case TpcnTipoCampo.tcDec9:
case TpcnTipoCampo.tcDec10:
{
int pos = ConteudoTag.IndexOf(".") + 1;
int ndec = ConteudoTag.Substring(pos).Length;
string xdec = ConteudoTag.Substring(pos);
//
// ajusta o numero de casas decimais
while (ndec > nDecimais)
{
if (xdec.Substring(ndec - 1, 1) == "0")
--ndec;
else
break;
}
if (ndec > nDecimais)
{
this.cMensagemErro += "Layout: " + this.layout.Replace(prefix, "") + Environment.NewLine;
this.cMensagemErro += string.Format("Segmento [{0}]: tag <{1}> número de casas decimais deve ser de {2} e existe(m) {3}" +
"\r\n\tLinha: {4}: Conteudo do segmento: {5}",
this.FSegmento, tag.ToString(), nDecimais, ndec, this.LinhaLida, this.Registro.Substring(1)) + Environment.NewLine;
}
#region -- atribui o numero de casas decimais que serão gravadas
if (ndec < (int)TpcnTipoCampo.tcDec2 || ndec > (int)TpcnTipoCampo.tcDec10)
ndec = (int)TpcnTipoCampo.tcDec2;
TpcnTipoCampo tipo = (TpcnTipoCampo)ndec;
if (tag == TpcnResources.vUnCom)
{
NFe.det[NFe.det.Count - 1].Prod.vUnCom_Tipo = tipo;
/*
switch (ndec)
{
case 2:
NFe.det[NFe.det.Count - 1].Prod.vUnCom_Tipo = TpcnTipoCampo.tcDec2;
break;
case 3:
NFe.det[NFe.det.Count - 1].Prod.vUnCom_Tipo = TpcnTipoCampo.tcDec3;
break;
case 4:
NFe.det[NFe.det.Count - 1].Prod.vUnCom_Tipo = TpcnTipoCampo.tcDec4;
break;
case 5:
NFe.det[NFe.det.Count - 1].Prod.vUnCom_Tipo = TpcnTipoCampo.tcDec5;
break;
case 6:
NFe.det[NFe.det.Count - 1].Prod.vUnCom_Tipo = TpcnTipoCampo.tcDec6;
break;
case 10:
NFe.det[NFe.det.Count - 1].Prod.vUnCom_Tipo = TpcnTipoCampo.tcDec10;
break;
}*/
}
if (tag == TpcnResources.vUnTrib)
{
NFe.det[NFe.det.Count - 1].Prod.vUnTrib_Tipo = tipo;
/*
switch (ndec)
{
case 2:
NFe.det[NFe.det.Count - 1].Prod.vUnTrib_Tipo = TpcnTipoCampo.tcDec2;
break;
case 3:
NFe.det[NFe.det.Count - 1].Prod.vUnTrib_Tipo = TpcnTipoCampo.tcDec3;
break;
case 4:
NFe.det[NFe.det.Count - 1].Prod.vUnTrib_Tipo = TpcnTipoCampo.tcDec4;
break;
case 10:
NFe.det[NFe.det.Count - 1].Prod.vUnTrib_Tipo = TpcnTipoCampo.tcDec10;
break;
}*/
}
if (tag == TpcnResources.qTotMes)
{
NFe.cana.qTotMes_Tipo = tipo;
/*
switch (ndec)
{
case 2:
NFe.cana.qTotMes_Tipo = TpcnTipoCampo.tcDec2;
break;
case 3:
NFe.cana.qTotMes_Tipo = TpcnTipoCampo.tcDec3;
break;
case 4:
NFe.cana.qTotMes_Tipo = TpcnTipoCampo.tcDec4;
break;
case 10:
NFe.cana.qTotMes_Tipo = TpcnTipoCampo.tcDec10;
break;
}*/
}
if (tag == TpcnResources.qTotAnt)
{
NFe.cana.qTotAnt_Tipo = tipo;
/*
switch (ndec)
{
case 2:
NFe.cana.qTotAnt_Tipo = TpcnTipoCampo.tcDec2;
break;
case 3:
NFe.cana.qTotAnt_Tipo = TpcnTipoCampo.tcDec3;
break;
case 4:
NFe.cana.qTotAnt_Tipo = TpcnTipoCampo.tcDec4;
break;
case 10:
NFe.cana.qTotAnt_Tipo = TpcnTipoCampo.tcDec10;
break;
}*/
}
if (tag == TpcnResources.qTotGer)
{
NFe.cana.qTotGer_Tipo = tipo;
/*
switch (ndec)
{
case 2:
NFe.cana.qTotGer_Tipo = TpcnTipoCampo.tcDec2;
break;
case 3:
NFe.cana.qTotGer_Tipo = TpcnTipoCampo.tcDec3;
break;
case 4:
NFe.cana.qTotGer_Tipo = TpcnTipoCampo.tcDec4;
break;
case 10:
NFe.cana.qTotGer_Tipo = TpcnTipoCampo.tcDec10;
break;
}*/
}
if (tag == TpcnResources.qtde)
{
NFe.cana.fordia[NFe.cana.fordia.Count - 1].qtde_Tipo = tipo;
/*
switch (ndec)
{
case 2:
NFe.cana.fordia[NFe.cana.fordia.Count - 1].qtde_Tipo = TpcnTipoCampo.tcDec2;
break;
case 3:
NFe.cana.fordia[NFe.cana.fordia.Count - 1].qtde_Tipo = TpcnTipoCampo.tcDec3;
break;
case 4:
NFe.cana.fordia[NFe.cana.fordia.Count - 1].qtde_Tipo = TpcnTipoCampo.tcDec4;
break;
case 10:
NFe.cana.fordia[NFe.cana.fordia.Count - 1].qtde_Tipo = TpcnTipoCampo.tcDec10;
break;
}*/
}
#endregion
}
break;
}
}
switch (Tipo)
{
case TpcnTipoCampo.tcDatYYYYMMDD:
return this.getDate2(Tipo, ConteudoTag);
case TpcnTipoCampo.tcDatYYYY_MM_DD:
case TpcnTipoCampo.tcDatHor:
return this.getDateTime(Tipo, ConteudoTag);
case TpcnTipoCampo.tcHor:
return this.getTime(ConteudoTag);
case TpcnTipoCampo.tcDec2:
case TpcnTipoCampo.tcDec3:
case TpcnTipoCampo.tcDec4:
case TpcnTipoCampo.tcDec5:
case TpcnTipoCampo.tcDec6:
case TpcnTipoCampo.tcDec7:
case TpcnTipoCampo.tcDec8:
case TpcnTipoCampo.tcDec9:
case TpcnTipoCampo.tcDec10:
return Convert.ToDouble("0" + ConteudoTag.Replace(".", System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator));
case TpcnTipoCampo.tcInt:
return Convert.ToInt32("0" + SomenteNumeros(ConteudoTag));
default:
return (trim ? ConteudoTag.Trim() : ConteudoTag);
}
}
catch (Exception ex)
{
this.cMensagemErro += "Layout: " + this.layout.Replace(prefix, "") + Environment.NewLine;
this.cMensagemErro += string.Format("Segmento [{0}]: tag <{1}> Conteudo: {2}\r\n" +
"\tLinha: {3}: Conteudo do segmento: {4}\r\n\tMensagem de erro: {5}",
this.FSegmento, tag.ToString(), ConteudoTag, this.LinhaLida, this.Registro.Substring(1),
ex.Message) + Environment.NewLine;
switch (Tipo)
{
case TpcnTipoCampo.tcHor:
case TpcnTipoCampo.tcDatYYYY_MM_DD:
case TpcnTipoCampo.tcDatYYYYMMDD:
case TpcnTipoCampo.tcDatHor:
return DateTime.MinValue;
case TpcnTipoCampo.tcDec2:
case TpcnTipoCampo.tcDec3:
case TpcnTipoCampo.tcDec4:
case TpcnTipoCampo.tcDec5:
case TpcnTipoCampo.tcDec6:
case TpcnTipoCampo.tcDec7:
case TpcnTipoCampo.tcDec8:
case TpcnTipoCampo.tcDec9:
case TpcnTipoCampo.tcDec10:
return 0.0;
case TpcnTipoCampo.tcInt:
return 0;
default:
return "";
}
}
}