【发布时间】:2023-03-24 07:05:01
【问题描述】:
我真的很难完成这项工作。
我有一个string mess,我需要将其分成三块。我已经正确完成了这项工作,但现在我陷入了如何验证最后两个带有特殊字符的字符串的前两个块(i_clob1 和 i_clob2)"<",">","</" - 因为当我剪切了这三个块,我的存储过程附加了三个字符串,当它被剪切到这些字符中时看起来很糟糕。
如果第一个 (i_clob1) 或第二个 (i_clob2) 块最后包含字符,我想知道如何扩展字符串,以便我没有最后的字符或者修剪它?在不丢失字符的情况下。然后字符将在下一个字符串中。最后一个块 (i_clob3) 不需要验证,因为它总是有最后一位文本。
我真的希望有人能解答我的谜语:-)
我的快乐方案是在一些随机文本而不是那些字符中剪切字符串。
我当前的代码:
public void Enqueue(string queueName, string mess)
{
if (mess.Length >= 3 && mess.Length <= 32000 * 3)
{
int lastStart = 2 * mess.Length / 3;
int lastLength = mess.Length - lastStart;
string i_clob1 = mess.Substring(0, (mess.Length / 3));
string i_clob2 = mess.Substring(mess.Length / 3, mess.Length / 3);
string i_clob3 = mess.Substring(lastStart, lastLength);
OracleCommand cmd = null;
try
{
cmd = new OracleCommand("", m_Connection)
{
CommandText = m_InSpName,
CommandType = CommandType.StoredProcedure
};
//add Aq queue name
OracleParameter qName = new OracleParameter("qname", OracleType.VarChar)
{
Direction = ParameterDirection.Input,
Value = queueName
};
//add message to enqueue
OracleParameter message1 = new OracleParameter("i_clob1", OracleType.Clob)
{
Direction = ParameterDirection.Input
};
OracleParameter message2 = new OracleParameter("i_clob2", OracleType.Clob)
{
Direction = ParameterDirection.Input
};
OracleParameter message3 = new OracleParameter("i_clob3", OracleType.Clob)
{
Direction = ParameterDirection.Input
};
i_clob1 = i_clob1.Replace("<?xml version=\"1.0\" encoding=\"utf-16\"?>", "");
message1.Value = i_clob1;
message2.Value = i_clob2;
message3.Value = i_clob3;
cmd.Parameters.Add(qName);
cmd.Parameters.Add(message1);
cmd.Parameters.Add(message2);
cmd.Parameters.Add(message3);
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
//rethrow exception and make sure we clean up i.e. execute finally below
throw new Exception("An error has occurred trying to deliver to the queue", ex);
}
finally
{
if (cmd != null)
{
cmd.Dispose();
}
}
}
}
这是我输入的一个示例。通常总共大约 30.000 个字符。
<item>
<item_number>1231</item_number>
<item_title>Lorem ipsum dolor sit</item_title>
<item_pbl_code>Lorem ipsum dolor sit</item_pbl_code>
<item_dep_code>Lorem ipsum dolor sit</item_dep_code>
<item_off_code>Lorem ipsum dolor sit</item_off_code>
<item_digitized_timestamp>2013-11-04 09:07:56</item_digitized_timestamp>
<item_source_url>Loremadsa/adad1231/12312</item_source_url>
<item_cat_code>Lorem ipsum dolor sit</item_cat_code>
<item_ars_code>Lorem ipsum dolor sit</item_ars_code>
<item_ric_code>Lorem ipsum dolor sit</item_ric_code>
<item_rle_code>Lorem ipsum dolor sit</item_rle_code>
<item_code>Lorem ipsum dolor sit</item_code>
<subjects>
<sub_keyword />
</subjects>
<item_description1>A lot of text goes here</item_description1>
<item_description2>A lot of text goes here</item_description2>
<item_description3>A lot of text goes here</item_description3>
</item>
描述字段通常约为 10 - 20.000 个字符
我的输出将是新的解决方案:
第一块
<item>
<item_number>1231</item_number>
<item_title>Lorem ipsum dolor sit</item_title>
<item_pbl_code>Lorem ipsum dolor sit</item_pbl_code>
<item_dep_code>Lorem ipsum dolor sit</item_dep_code>
<item_off_code>Lorem ipsum dolor sit</item_off_code>
<item_digitized_timestamp>2013-11-04 09:07:56</item_digitized_timestamp>
<item_source_url>Loremadsa/adad
第二块
1231/12312</item_source_url>
<item_cat_code>Lorem ipsum dolor sit</item_cat_code>
<item_ars_code>Lorem ipsum dolor sit</item_ars_code>
<item_ric_code>Lorem ipsum dolor sit</item_ric_code>
<item_rle_code>Lorem ipsum dolor sit</item_rle_code>
<item_code>Lorem ipsum dolor
第三块
sit</item_code>
<subjects>
<sub_keyword />
</subjects>
<item_description1>A lot of text goes here</item_description1>
<item_description2>A lot of text goes here</item_description2>
<item_description3>A lot of text goes here</item_description3>
</item>
【问题讨论】:
-
如果您可以发布输入和预期输出的示例,这可能会有所帮助。
-
我会选择
XDocument或其他一些内置功能来解析 xml,而不是将其视为文本。 -
您的解释、您的知识、您的努力等不在此处所期望的范围内(或多或少在定制软件开发公司对其客户的期望范围内:未明确定义的列表要求)。正如你所看到的,我已经发布了一个答案(尽管,当你在上一个问题中没有太多交流时,我不太喜欢你删除的那个),因为就我提供了以前的算法......但是,请将此视为完全不同寻常的事情。希望你在不久的将来能按预期使用 SO。
-
@varocarbas 很遗憾听到您没有按照您希望的方式看待我的问题,但我正在尽我所能解释这种情况。我有一段时间试图解决这个问题,但没有很好的尝试,也没有很好的代码示例。因此,我没有上一篇文章中的谜语示例。无论如何,我感谢您的回答和您的努力。
-
您不必感到抱歉。如果您认为我是对的,请在这方面加倍努力(我总是说些有帮助的话……您在 SO 方面没有太多经验,并认为您需要对大多数人在这里思考)。