C# 删除.csv/.txt/.xml中字符前后不需要的文本
嗨,朋友们,我有一个.csv文件,其中有一些不需要的文本,我只想删除这些文本以提取文件名。 到目前为止,我已经尝试了下面的代码,但它删除了文件中的全部数据。 如果有人有任何想法来解决这个问题,请帮助。使用C#和powershell脚本的soultion将不胜感激。 (获取内容“D:\Saved\document\document1.csv”)|C# 删除.csv/.txt/.xml中字符前后不需要的文本,c#,.net,powershell,C#,.net,Powershell,嗨,朋友们,我有一个.csv文件,其中有一些不需要的文本,我只想删除这些文本以提取文件名。 到目前为止,我已经尝试了下面的代码,但它删除了文件中的全部数据。 如果有人有任何想法来解决这个问题,请帮助。使用C#和powershell脚本的soultion将不胜感激。 (获取内容“D:\Saved\document\document1.csv”)| Foreach对象{$\替换“>”-replace“您的文本不是csv,而是xml文件。 Powershell可以非常轻松地解析xml(我已经将信息从扩
Foreach对象{$\替换“>”-replace“您的文本不是csv,而是xml文件。 Powershell可以非常轻松地解析xml(我已经将信息从
扩展到
):
将输出
load\hcl\safetoload\doc_typ\TEST-2014-08026_doc_typ.csv ---->> hcl\safetoload\doc_typ\doc_typ.ctl
load\hcl\safetoload\doc_typ_arg\TEST-2014-08026_doc_typ_arg.csv ---->> hcl\safetoload\doc_typ_arg\doc_typ_arg.ctl
load\hcl\safetoload\doc_lblfmt\TEST-2014-08026_doc_lblfmt.csv ---->> hcl\safetoload\doc_lblfmt\doc_lblfmt.ctl
load\hcl\safetoload\dscmst\TEST-2014-08026_dscmst.csv ---->> hcl\safetoload\dscmst\dscmst.ctl
load\hcl\safetoload\lblfmt\TEST-2014-08026_lblfmt.csv ---->> hcl\safetoload\lblfmt\lblfmt.ctl
要仅提取文件名,请执行以下操作:
PS>$file.csvfiles.csv |%{ (split-path $_.file -leaf) +" ---->> "+ (split-path $_.loadCtl -leaf)}
输出
TEST-2014-08026_doc_typ.csv ---->> doc_typ.ctl
TEST-2014-08026_doc_typ_arg.csv ---->> doc_typ_arg.ctl
TEST-2014-08026_doc_lblfmt.csv ---->> doc_lblfmt.ctl
TEST-2014-08026_dscmst.csv ---->> dscmst.ctl
TEST-2014-08026_lblfmt.csv ---->> lblfmt.ctl
最干净的方法是将数据解析为XmlDocument并通过选择器进行处理 C#解决方案(快速脏版,添加更多!=空检查) 输出:
TEST-2014-08026_doc_typ.csv
doc_typ.ctl
TEST-2014-08026_doc_typ_arg.csv
doc_typ_arg.ctl
TEST-2014-08026_doc_lblfmt.csv
doc_lblfmt.ctl
TEST-2014-08026_dscmst.csv
dscmst.ctl
TEST-2014-08026_lblfmt.csv
lblfmt.ctl
TEST-2014-08026_doc_typ.csv
文件类型ctl
TEST-2014-08026_doc_typ_arg.csv
doc_typ_arg.ctl
TEST-2014-08026_doc_lblfmt.csv
doc_lblfmt.ctl
TEST-2014-08026_dscmst.csv
dscmst.ctl
TEST-2014-08026_lblfmt.csv
lblfmt.ctl
或者你可以在上面做一个正则表达式搜索
GC D:\Convert\txtdoc\rtbTextBox.csv | ?{$_ -match "\\([^\\]+?\.(?:csv|ctl))<"}|%{$Matches[1]}
编辑:仅获取CSV和CTL文件。如果需要所有文件,请将(?:CSV | CTL)
更改为*?
,即可设置
Edit2:好的,需要稍微修改一下,但这应该会抓住你所有的文件名:
GC C:\temp\test.txt | ?{$_ -match "(?:.*?file.*?|loadctl|command)>.*?\\?([^\\]+?\..*?)<"}|%{$Matches[1]}
这将捕获节点名中包含
文件且匹配*.
模式的任何内容,以及匹配*.
模式的loadctl
节点。是的,您是对的,这是一个XML文件,我已将此XML文件转换为.CSV。我在提取准确的文件名时面临问题。简而言之,从下面的列表中可以看出ne我只想获得输出数据为“TEST-2014-08026_doc_typ.csv”,而不是整行加载\hcl\safetoload\doc_typ\TEST-2014-08026_doc_typ.csv。请查看此链接以帮助我。谢谢。[链接]您的输出结果对我来说非常完美,它与我想要的完全相同。但当我尝试运行您提供的脚本时,我发现以下错误。拆分路径:无法将参数“Path”绑定到参数“Path”,因为它为空。位于D:\xml.ps1:2 char:35+$file.csvfiles.csv |%{(分割路径是的,我使用的是3.8.0.129版本的PowerShell尝试以下内容:$file.csvfiles.csv |%{$path=$($.file);(分割路径-路径$path-leaf)}
为什么C#标记在这里?=@Seva,因为两种语言的解决方案对我都很有用,通过这种方式,我可以在这里获得更多成员的帮助。谢谢。当我尝试运行您的上述代码时,什么都没有发生,我是说在执行Result=空白屏幕后,我想在.csv文件中获得结果。单击按钮是否可以?这不是一个完整的程序,只是一个片段。结果将存储在“result”变量中。如果要将其写入文件,只需添加行System.IO.file.writealText(csvFilename,result)
谢谢,我几乎得到了我想要的东西,但仍然缺少一些东西,我没有得到最后一行。使用此代码的msql文件请帮助。GC D:\Convert\txtdoc\rtbTextBox.csv |{$-match“\([^\]+.(.*)嗨,我在运行EDIT2代码错误参数到运算符'-match':解析“(?:.?file.?| loadctl)>。?\?([^]+?..?).?\?([^]+?..?)很抱歉,它的格式不正确,因此丢失了字符。我更正了格式。您需要修复行开头的文件路径。首先,我要感谢您解决了我的问题。但是,我再次遇到麻烦,我还有一个.TXT文件,其中的文本为代码2。请参阅第一篇帖子,我更新了代码,但是all您需要做的是将节点名添加到匹配模式的开头,其中可能的节点由管道字符分隔。因此(?:*?file.*?;loadctl)
变成(?:*?file.*??loadctl | command)
,现在它也包括该节点。您应该能够调整该节点以备将来使用。
TEST-2014-08026_doc_typ.csv ---->> doc_typ.ctl
TEST-2014-08026_doc_typ_arg.csv ---->> doc_typ_arg.ctl
TEST-2014-08026_doc_lblfmt.csv ---->> doc_lblfmt.ctl
TEST-2014-08026_dscmst.csv ---->> dscmst.ctl
TEST-2014-08026_lblfmt.csv ---->> lblfmt.ctl
XmlDocument document = new XmlDocument();
//Load the xml from a file
document.Load(fileName);
XmlNodeList csvNodes = document.SelectNodes("//csv");
if (csvNodes == null) return;
StringBuilder builder = new StringBuilder();
foreach (XmlNode csvNode in csvNodes)
{
//You might want to add some checks for null here
string file = csvNode.SelectSingleNode("./file").InnerText;
string loadCtl = csvNode.SelectSingleNode("./loadCtl").InnerText;
//Trim the paths
file = file.Substring(file.LastIndexOf('\\') + 1);
loadCtl = loadCtl.Substring(loadCtl.LastIndexOf('\\') + 1);
builder.AppendLine(file);
builder.AppendLine(loadCtl);
}
string result = builder.ToString();
GC D:\Convert\txtdoc\rtbTextBox.csv | ?{$_ -match "\\([^\\]+?\.(?:csv|ctl))<"}|%{$Matches[1]}
TEST-2014-08026_doc_typ.csv
doc_typ.ctl
TEST-2014-08026_doc_typ_arg.csv
doc_typ_arg.ctl
TEST-2014-08026_doc_lblfmt.csv
doc_lblfmt.ctl
TEST-2014-08026_dscmst.csv
dscmst.ctl
TEST-2014-08026_lblfmt.csv
lblfmt.ctl
GC C:\temp\test.txt | ?{$_ -match "(?:.*?file.*?|loadctl|command)>.*?\\?([^\\]+?\..*?)<"}|%{$Matches[1]}
TEST-2014-08026_doc_typ.csv
doc_typ.ctl
TEST-2014-08026_doc_typ_arg.csv
doc_typ_arg.ctl
TEST-2014-08026_doc_lblfmt.csv
doc_lblfmt.ctl
TEST-2014-08026_dscmst.csv
dscmst.ctl
TEST-2014-08026_lblfmt.csv
lblfmt.ctl
1662_ceva_carlbl.POF
1662_ceva_carlbl.lbl
1662_ceva_carlbl.msql