Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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# 是否可以将字符串数组转换为一个字符串?_C#_Regex_String_Concatenation - Fatal编程技术网

C# 是否可以将字符串数组转换为一个字符串?

C# 是否可以将字符串数组转换为一个字符串?,c#,regex,string,concatenation,C#,Regex,String,Concatenation,在我的程序中,我使用以下语句读取文件: string[] allLines = File.ReadAllLines(dataFile); 但是我想将正则表达式作为一个整体应用于文件(底部显示了一个示例文件),这样就可以消除文件中我不关心的某些内容。我不能使用ReadAllText,因为我需要为了程序的另一个目的逐行读取它(删除每行的空白) (感谢chiccodoro的代码) 这是我想申请的正则表达式 有没有办法将数组改回一个文本文件?或者其他解决问题的方法? 突然出现在我脑海中的东西正在取

在我的程序中,我使用以下语句读取文件:

string[] allLines = File.ReadAllLines(dataFile);  
但是我想将正则表达式作为一个整体应用于文件(底部显示了一个示例文件),这样就可以消除文件中我不关心的某些内容。我不能使用ReadAllText,因为我需要为了程序的另一个目的逐行读取它(删除每行的空白)

(感谢chiccodoro的代码)
这是我想申请的正则表达式

有没有办法将数组改回一个文本文件?或者其他解决问题的方法?
突然出现在我脑海中的东西正在取代我不关心的
string.Empty

示例文件

您可以使用:

如果您只想将其写回文件,您可以使用and,它可以与数组一起工作。

只需从

string[]allLines=File.ReadAllLines(数据文件)

string allLines=File.ReadAllText(数据文件)


)()

将使用任何指定的分隔符连接数组的所有成员。

使用regexen一次一行处理多行数据将非常困难。因此,我建议您首先将其作为一个大字符串阅读,执行多行正则表达式业务,然后可以使用string.split(在换行符上拆分)将其拆分为一个字符串数组,而不是对此进行胡乱处理。您希望按此顺序执行此操作的原因是,对文件数据的任何进一步操作都将包括正则表达式已经进行的更改。如果加入字符串,然后执行正则表达式,则必须再次拆分该字符串,或者在对原始数组进行操作时丢失对该字符串所做的更改

public string CreateStringFromArray(string[] allLines)
{        
StringBuilder builder = new StringBuilder();
        foreach (string item in allLines)
        {
             builder.Append(item);
             //Appending Linebreaks
             builder.Append("\n\l");
        }
        return builder.ToString();  
}
请记住将其用于正则表达式匹配,以便在换行符之间匹配:

Regex r = new Regex(@"CREATE TABLE [^(]+((.*)) ON", RegexOptions.SingleLine);

您可以像这样将字符串[]连接到单个字符串中

string strmessage=string.join(",",allLines);

输出:-一个单独的、分隔的字符串。

当您在每行中读取时,是否可以建立一个缓冲区?我的想法是,这可能比将所有行作为字符串数组,然后将它们连接起来更有效一些(……尽管我还没有对这个问题做过全面的研究,我很想知道这样做是否有什么理由更有效)


回答之前先读我的问题!您还需要更改正则表达式,使其与换行符匹配:new regex(@“CREATE TABLE[^(]+(.*)ON)”,RegexOptions.SingleLine);您还可以使用Environment.NewLine而不是“\r\n”@new Start:数组中的数字元素是否可以更改并不重要。分隔符是第一个参数(如果需要,可以是
字符串。空的
)。很有趣,我刚刚完成了连接代码的实现,我想“天哪,我该怎么把它拆分成一个数组?”…然后我读了这篇文章。哈,非常感谢你的帮助!你也需要把新行放回去;ReadAllLines丢弃了原来的新行。
public string CreateStringFromArray(string[] allLines)
{        
StringBuilder builder = new StringBuilder();
        foreach (string item in allLines)
        {
             builder.Append(item);
             //Appending Linebreaks
             builder.Append("\n\l");
        }
        return builder.ToString();  
}
Regex r = new Regex(@"CREATE TABLE [^(]+((.*)) ON", RegexOptions.SingleLine);
string strmessage=string.join(",",allLines);
StringBuilder buffer = new StringBuilder();
string line = null;
using (StreamReader sr = new StreamReader(dataFile))
{
    while((line = sr.ReadLine()) != null)
    {
        // Do whatever you need to do with the individual line...
        // ...then append the line to your buffer.
        buffer.Append(line); 
    }
}
// Now, you can do whatever you need to do with the contents of
// the buffer.
string wholeText = buffer.ToString();