Можно ли преобразовать массив строк в одну строку?
в моей программе я читаю в файле, используя этот оператор:
string[] allLines = File.ReadAllLines(dataFile);
но я хочу применить регулярное выражение к файлу в целом (пример файла показан внизу), чтобы я мог устранить некоторые вещи, которые меня не касаются в файле. Я не могу использовать ReadAllText, поскольку мне нужно читать его строка за строкой для другой цели Программы (Удаление пробелов из каждой строки).
Regex r = new Regex(@"CREATE TABLE [^(]+((.*)) ON");
(спасибо chiccodoro за этот код)
Это регулярное выражение, которое я хочу применять.
есть ли способ, чтобы изменить массив обратно в один текстовый файл? Или любое другое решение проблемы?
Вещи, которые появляются в моем уме, заменяют "вещи", которые меня не волнуют string.Empty
.
пример файла
USE [Shelleys Other Database]
CREATE TABLE db.exmpcustomers(
f_name varchar(100) NULL,
l_name varchar(100) NULL,
date_of_birth date NULL,
house_number int NULL,
street_name varchar(100) NULL
) ON [PRIMARY]
7 ответов
будет очень сложно использовать regexen для работы с многострочными данными по строке за раз. Поэтому, вместо того, чтобы возиться с этим, я предлагаю вам сначала прочитать его как одну большую строку, сделать свой многострочный бизнес регулярного выражения, а затем вы можете разделить его на массив строк с помощью String.Split (разделить на новые строки). Причина, по которой вы хотите сделать это в этом порядке, заключается в том, что любые дальнейшие операции с данными файла будут включать изменения, уже внесенные регулярным выражением. Если вы присоединитесь к строки, затем выполните регулярное выражение, вам придется либо снова разделить эту строку, либо потерять изменения, внесенные в нее, пока вы работаете с исходным массивом.
Не забудьте использовать это для сопоставления регулярных выражений, чтобы оно соответствовало новым строкам:
Regex r = new Regex(@"CREATE TABLE [^(]+((.*)) ON", RegexOptions.SingleLine);
вы можете объединить string[] в одну строку, как это
string strmessage=string.join(",",allLines);
вывод: - одна, разделенная строка.
можно использовать String.Join()
:
string joined = String.Join(Environment.NewLine, allLines);
Если вы просто хотите записать его обратно в файл, вы можете использовать File.WriteAllLines()
и это работает с массивом.
String.Join
объединит все члены вашего массива, используя любой указанный разделитель.
просто измените с
string[] allLines = File.ReadAllLines(dataFile);
to
string allLines = File.ReadAllText(dataFile);
;)
не могли бы вы создать буфер, как Вы читаете в каждой строке? У меня есть идея, что это может быть немного эффективнее, чем получить все строки в виде строкового массива, а затем присоединиться к ним (...хотя я не сделал полного изучения этого вопроса и был бы заинтересован услышать, Есть ли какая-то причина, по которой на самом деле более эффективно идти этим путем).
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();
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();
}