Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 删除.csv/.txt/.xml中字符前后不需要的文本_C#_.net_Powershell - Fatal编程技术网

C# 删除.csv/.txt/.xml中字符前后不需要的文本

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(我已经将信息从扩

嗨,朋友们,我有一个.csv文件,其中有一些不需要的文本,我只想删除这些文本以提取文件名。 到目前为止,我已经尝试了下面的代码,但它删除了文件中的全部数据。 如果有人有任何想法来解决这个问题,请帮助。使用C#和powershell脚本的soultion将不胜感激。

(获取内容“D:\Saved\document\document1.csv”)|


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