Tag: 替换

在C#中处理大量文件

我有一个4Gb文件,我想执行基于字节的查找和替换。 我已经编写了一个简单的程序来完成它,但是只需要一个查找和替换就需要太长时间(90分钟+)。 我尝试过的一些hex编辑器可以在3分钟内完成任务,并且不会将整个目标文件加载到内存中。 有谁知道我可以完成同样的事情的方法? 这是我目前的代码: public int ReplaceBytes(string File, byte[] Find, byte[] Replace) { var Stream = new FileStream(File, FileMode.Open, FileAccess.ReadWrite); int FindPoint = 0; int Results = 0; for (long i = 0; i Find.Length – 1) { Results++; FindPoint = 0; Stream.Seek(-Find.Length, SeekOrigin.Current); Stream.Write(Replace, 0, Replace.Length); } } else { FindPoint = 0; […]

使用List 替换字符串

我有一个我想忽略的单词列表,如下所示: public List ignoreList = new List() { “North”, “South”, “East”, “West” }; 对于给定的字符串,比如说”14th Avenue North”我希望能够删除“North”部分,所以基本上这个函数在被调用时将返回”14th Avenue ” 。 我觉得有一些东西我可以用LINQ,正则表达式和替换混合,但我只是想不出来。 更大的图景是,我正在尝试编写一个地址匹配算法。 在使用Levenshtein算法评估相似性之前,我想过滤掉“Street”,“North”,“Boulevard”等词。

想要从字符串中删除双引号

我在这里看到一些与删除双引号有关的问题。 但它没有解决我的问题。 他们告诉使用Replace或Trimfunction。 我用过,但问题仍然存在。 我的代码: DataTable dt = TypeConveriontHelper.ConvretExcelToDataTable(SourceAppFilePath); string targetPath = BatchFolderPath + @”\” + “TRANSACT.INX”; StreamWriter wrtr = null; wrtr = new StreamWriter(targetPath); for (int x = 0; x < dt.Rows.Count; x++) { string rowString = ""; for (int y = 0; y < dt.Columns.Count; y++) { if (y == dt.Columns.Count – 1) […]

当字符串为空时,将字符串值替换为’0′

我从文本框中取一个值并将其转换为十进制。 但是,文本框值可能为空。 那么,我怎么能从文本框中处理空字符串呢? 不幸的是,我有大约50个文本框要处理,所以像’检查带有IF条件的空’这样的答案对我没有帮助。 如果我使用所有这些IF条件,我的代码将看起来很难看。 我有这个 Convert.ToDecimal(txtSample.Text) 为了处理空值,我做了这个 Convert.ToDecimal(txtSample.Text = string.IsNullOrEmpty(txtSample.Text) ? “0” : txtSample.Text) 但是,上面的代码在文本框中显示“0”。 用户不希望看到’0’。 另一种解决方案是将文本框值转换为变量并转换变量,如下所示。 string variable = txtSample.Text; Convert.ToDecimal(variable = string.IsNullOrEmpty(variable) ? “0” : variable) 但同样,我不想定义大约50个变量。 我正在寻找一些代码,在转换过程中处理空值而不添加额外的代码行。

如何加速循环? 是否有一个课程来替换多个术语?

循环: var pattern = _dict[key]; string before; do { before = pattern; foreach (var pair in _dict) if (key != pair.Key) pattern = pattern.Replace(string.Concat(“{“, pair.Key, “}”), string.Concat(“(“, pair.Value, “)”)); } while (pattern != before); return pattern; 它只是在一堆键上重复查找和替换。 字典只是 。 我可以看到2个改进。 每次我们执行pattern.Replace它再次从字符串的开头搜索。 如果它碰到第一个{ ,它只会查看匹配的键列表(可能使用二进制搜索),然后替换适当的一个,那会更好。 pattern != before bit pattern != before是我如何检查在迭代期间是否有任何替换。 如果pattern.Replace函数返回了实际发生的实际替换次数,我不需要这个。 但是……我真的不想写一个很讨厌的东西来做这一切。 这必须是一个相当普遍的情况? 有没有现成的解决方案? 全class […]

快速替换第一行大文件

我有许多大型csv文件(每个1-10 GB),我将其导入数据库。 对于每个文件,我需要替换第一行,以便我可以将标题格式化为列名。 我目前的解决方案是: using (var reader = new StreamReader(file)) { using (var writer = new StreamWriter(fixed)) { var line = reader.ReadLine(); var fixedLine = parseHeaders(line); writer.WriteLine(fixedLine); while ((line = reader.ReadLine()) != null) writer.WriteLine(line); } } 什么是更快的方法来只替换第1行而不迭代这些巨大文件的每一行?

正则表达式,匹配所有有效格式的IPv6地址

乍一看,我承认这个问题看起来像这个问题的副本以及与之相关的任何其他问题: 与有效IPv6地址匹配的正则表达式 事实上这个问题的答案几乎可以回答我的问题, 但并不完全。 我遇到的问题代码,但最成功的代码如下所示: private string RemoveIPv6(string sInput) { string pattern = @”(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))”; //That is one looooong regex! From: https://stackoverflow.com/a/17871737/3472690 //if (IsCompressedIPv6(sInput)) // sInput = UncompressIPv6(sInput); string output = Regex.Replace(sInput, pattern, “”); if (output.Contains(“Addresses”)) output = output.Substring(0, “Addresses: “.Length); return output; } 我在答案中提供的正则表达式模式的问题, David M. Syzdek的答案 ,是它不匹配并删除我正在抛出的IPv6地址的完整forms。 我正在使用正则表达式模式主要用空格或空值替换字符串中的IPv6地址。 例如, Addresses: 2404:6800:4003:c02::8a 以及… Addresses: 2404:6800:4003:804::200e […]

字符串将单引号替换为C#中的双引号

如何在C#中的字符串中用双引号(“)替换单引号(’)?

使用Mono.Cecil替换对类型/命名空间的引用

背景(不必要,令人困惑,只为好奇) 我正在使用Unity3D for Mobile的免费版本,它不允许我在移动设备上使用System.Net.Sockets命名空间。 问题是我正在使用引用System.Net.Sockets已编译的.dll库(即IKVM)。 我实际上并没有使用引用System.Net.Sockets IKVM中的类,因此我没有购买3000美元的Unity Pro移动许可证,而是创建了一个名为dudeprgm.Net.Sockets的Sockets命名空间的存根库, dudeprgm.Net.Sockets替换了所有存根的类和方法(我使用Mono源代码完成此操作)。 我的问题 我需要将dll中的所有System.Net.Sockets.*引用替换为dudeprgm.Net.Sockets.* 。 我知道这样的事情是可能的并且由其他人完成 (参见下面的编辑 ,在页面底部) 。 我想知道自己该怎么做。 我能够使用Mono.Cecil提出以下代码。 它遍历所有IL指令,检查操作数是否为InlineType ,然后检查内联类型是否是System.Net.Sockets一部分,然后将其重命名为dudeprgm.Net.Sockets并写入。 **我不确定这是否是在Mono.Cecil中进行“查找和替换”的正确方法。 问题是,这并没有捕获所有Sockets使用(见下文)。 private static AssemblyDefinition stubsAssembly; static void Main(string[] args) { AssemblyDefinition asm = AssemblyDefinition.ReadAssembly(args[0]); stubsAssembly = AssemblyDefinition.ReadAssembly(“Socket Stubs.dll”); // … // Call ProcessSockets on everything // … asm.Write(args[1]); } /* * This will be […]

使用C#/ .NET替换文件中文本的最佳方法是什么?

我有一个文本文件,作为一个非常大的数据提取的一部分写入。 文本文件的第一行是提取的“帐户”数。 由于此提取的性质,该数字直到过程的最后才知道,但文件可能很大(几百兆)。 在C#/ .NET中打开文件(在本例中是一个简单的文本文件),并替换文本的第一个“行”中的数据的最佳方法是什么? 重要说明 : – 我不需要替换“固定数量的字节” – 这很容易。 这里的问题是需要插入文件顶部的数据是可变的。 重要说明2 : – 有些人询问/提到只是将数据保存在内存中然后更换它……但这完全是不可能的。 更新此过程的原因是因为有时它会在将几个演出加载到内存时崩溃。