Можно ли преобразовать массив строк в одну строку? - PullRequest
6 голосов
/ 16 сентября 2010

В моей программе я читаю в файле следующее выражение:

string[] allLines = File.ReadAllLines(dataFile);  

Но я хочу применить Regex к файлу в целом (пример файла показан внизу), поэтому яможет устранить некоторые вещи, которые меня не интересуют в файле.Я не могу использовать 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 ]

16 голосов
/ 16 сентября 2010

Вы можете объединить строку [] в одну строку, как эта

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

вывод: -одночненная, отделенная строка.

8 голосов
/ 16 сентября 2010

Вы можете использовать String.Join():

string joined = String.Join(Environment.NewLine, allLines);

Если вы просто хотите записать его обратно в файл, вы можете использовать File.WriteAllLines() иэто работает с массивом.

5 голосов
/ 16 сентября 2010

String.Join объединит все элементы вашего массива, используя любой указанный разделитель.

3 голосов
/ 16 сентября 2010

Будет очень сложно использовать регулярные выражения для работы с многострочными данными по одной строке за раз.Поэтому вместо того, чтобы обдумывать это, я собираюсь предложить вам сначала прочитать ее как одну большую строку, заняться многострочным регулярным выражением, а затем разделить ее на массив строк с помощью String.Split (split onстроки).Причина, по которой вы хотите сделать это в таком порядке, заключается в том, что любые дальнейшие операции с данными вашего файла будут включать изменения, уже внесенные регулярным выражением.Если вы присоединитесь к строкам, а затем выполните регулярное выражение, вам придется либо снова разделить эту строку, либо потерять изменения, которые вы внесли в нее при работе с исходным массивом.

Не забудьте использовать это дляваше соответствие регулярному выражению, чтобы оно совпадало с новыми строками:

Regex r = new Regex(@"CREATE TABLE [^(]+((.*)) ON", RegexOptions.SingleLine);
0 голосов
/ 16 сентября 2010

Не могли бы вы создать буфер для каждой строки?У меня есть идея, что это может быть немного эффективнее, чем получить все строки в виде массива строк, а затем объединить их (... хотя я еще не полностью изучил проблему и было бы интересно узнать, есть ликакая-то причина, по которой это действительно более эффективно).

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();
0 голосов
/ 16 сентября 2010
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();  
}
0 голосов
/ 16 сентября 2010

Просто измените с

string[] allLines = File.ReadAllLines(dataFile);

на

string allLines = File.ReadAllText(dataFile);

;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...