所以,我有一个问题:
我想要阅读的文本存储在.xml文件中,但它包含标记为$.getJSON('http://127.0.0.1:8080/portfolio', function(data){ console.log(data)});
的参数(f.e。static void StringToIntegers()
{
var input = "333 967 860 -742 -279 -905 | -922 380 -127 630 38 -548 | 258 -522 157 -580 357 -502 | 963 486 909 -416 -936 -239 | 517 571 107 -676 531 -782 | 542 265 -171 251 -93 -638";
var primaryArray = input.Split('|');
foreach (var block in primaryArray)
{
var trimmedBlock = block.Trim();
var secondaryArray = trimmedBlock.Split(' ');
var intArray = StringArrToIntArr(secondaryArray);
}
}
private static int[] StringArrToIntArr(string[] secondaryArray)
{
int[] intArray = new int[secondaryArray.Length];
for (int i = 0; i < secondaryArray.Length; i++)
{
if (!int.TryParse(secondaryArray[i], out intArray[i]))
throw new FormatException(string.Format("The string {0} is not a compatible int type",
secondaryArray[i]));
}
return intArray;
}
)。
我还有$PARAMETER_NAME$
,其中包含所有必需的键/值对。
我想反序列化xml文件,但我需要用相应的值替换参数。
我提出的唯一解决方案是读取整个文件并替换每个值,但这种方法消耗太多内存并且非常幼稚
我可以以某种方式覆盖FileStream的$UserName$
方法来替换on-read上的值吗?
答案 0 :(得分:0)
我之前实际上已经做过这种事情,比较作为MD5导出为PDF文件的文档。我需要让流忽略pdf中存在的创建时间戳。基本方法如下:
Read(byte[] buffer, int offset, int count)
,并实现它,以便它读取所需的长度,加上前后文件(当然,文件的长度),最长字符串的长度。一旦你有这个更长的范围,搜索并替换其中的字符串。您之前和之后阅读的额外内容将确保您捕获所有参数。更换后,请务必再次将其切割为原始要求的尺寸。int ReadByte()
以调用基于缓冲区的完整读取,以便它也捕获这些参数。请注意,由于您正在使用字符串,因此您可能会遇到一些与xml文件中的文本编码有关的额外复杂情况;如果它是UTF-16,那么每个字符毕竟是两个字节。就个人而言,如果您知道期望的输入,我会将编码作为参数提供给构造函数;比在作者内部添加某种凌乱的检测更容易。
这是我为PDF阅读编写的一个类,但它只用相同长度的空字符串替换匹配。
但是,如果在读取过程中手动更改了读指针,则必须弄清楚如何解决指针异步问题。你永远不知道xml解析器的内部如何处理它;他们偶尔会回顾以前的标签。
您可能需要提前从构造函数中完整扫描文件,然后让它列出您找到密钥的所有偏移的完整列表,以及该位置上的密钥。对于任何请求的随机访问读取,这似乎是使方法可靠地将所请求的读指针调整到文件中正确的实际偏移量的唯一方法。