2012-06-21 6 views
0

Я пытался найти способ объединить 2 строки из одного текстового файла. Текстовый файл, который я читаю, имеет следующий формат:Как объединить 2 или более строк в текстовом файле

String 1
String 2
String 3
... и т. Д. Пример кода:

public static IEnumerable<string> getMeaningfulLines(string filename) 
    { 
     System.IO.StreamReader file = 
      new System.IO.StreamReader(filename); 
     while (!file.EndOfStream) 
     { 

      yield return file.ReadLine(); 
      yield return file.ReadLine(); 

      file.ReadLine(); 
      file.ReadLine(); 
      file.ReadLine(); 
      file.ReadLine(); 
     } 
    } 

    static void Main(string[] args) 
    { 


     foreach (string line in getMeaningfulLines(@"C://Log.txt")) 
     { 




      string teststring = line; 

      string[] parts = line.Split(' ', ',', '-', '>', '[', ']'); 
      StringBuilder builder = new StringBuilder(); 


      foreach (string h in parts) 
      { 
       builder.Append(h).Append(" "); 

      } 

      string result = builder.ToString(); 
      string cleanedString = System.Text.RegularExpressions.Regex.Replace(result, @"\s+", " "); 
      string trimString = cleanedString.Trim(); 

      trimString = trimString.Remove(trimString.Length - 1); 


      //Console.WriteLine(trimString); 

      string[] parts2 = trimString.Split(' '); 
      string quotedstring = "'" + string.Join("','", parts2) + "'"; 
      //Console.WriteLine(quotedstring); 
      string[] parts3 = quotedstring.Split(' '); 
      Console.WriteLine(quotedstring, quotedstring.Length); 
      //Console.WriteLine("1) The length of '{0}' is {1}", quotedstring, quotedstring.Length); 

Я хотел бы добавить строку 2 в строке 1, чтобы: "string1 string2". Я попытался использовать метод split и добавил их с помощью построителя строк. Однако это не работает, потому что он выполняет разделение и добавление в строку. Я также не могу использовать "." чтобы объединить их, потому что они не хранятся в переменных. Кто-нибудь знает, как добиться этого или примера? Спасибо.

+0

Что вы подразумеваете под словом «Тем не менее, это не работает, потому что он выполняет разделение и добавление в строку»? – Dai

+3

Можете ли вы дать образец своего кода, а также объяснить, что вы подразумеваете под этим, не работая из-за разделения на строку? То, как вы читаете в файле, может повлиять на то, что решение ... – Chris

+0

Извините, я не упомянул, что есть несколько полей внутри строк, все они. Пример: «имя», «идентификатор», «город», «состояние». Поэтому я могу разделить их и добавить их в одну строку, но по строке на строку. – Rick

ответ

6

Текстовый файл, который я читаю, имеет следующий формат:
Строка 1
Строка 2
Строка 3 ... и т.д.. Я хотел бы добавить строку 2 в строку 1, чтобы иметь: «String1 String2».

Если вы хотите добавить каждую строку в файл, с пробелом между ними, то сделать это:

string[] lines = File.ReadAllLines("my_file.txt"); 
string result = string.Join(" ", lines); 

Если строки файла имеют структуру, то вы можете определить класс провести эту структуру, например:

class Company 
{ 
    private string name; 
    private int id; 
    private string city; 
    private string state; 

    public string Name { get { return name; } } 
    public int Id { get { return id; } } 
    public string City { get { return city; } } 
    public string State { get { return state; } } 

    public Company(string name, int id, string city, string state) 
    { 
    this.name = name; 
    this.id = id; 
    this.city = city; 
    this.state = state; 
    } 

    public override string ToString() 
    { 
    // Create a formatted string from the fields here, for example: 
    return name + " " + id + " " + city + " " + state; 
    } 

    public static Company FromLine(string line) 
    { 
    // Extract the fields from a line, and post-process the fields here, for example: 
    string[] tokens = line.Split(separators); 
    string name = tokens[0].Trim(); 
    int id = Convert.ToInt32(tokens[1]); 
    string city = tokens[2]; 
    string state = tokens[3]; 
    return new Company(name, id, city, state); 
    } 
} 

этот класс может быть использован для извлечения полей каждой строки, форматировать их, и добавить эти отформатированные строки:

string[] lines = File.ReadAllLines("my_file.txt"); 
List<Company> companies = new List<Company>(); 
foreach (string line in lines) 
    companies.Add(Company.FromLine(line)); 
string result = string.Join(" ", companies); 

Вы даже можете указать, какие элементы добавить, просто измените последнюю строку, например. как это:

string result = string.Join(" ", companies.Where(company => company.Id > 10)); 
+0

спасибо за ваш ответ, я попробую и посмотрю, как это работает. – Rick

1

Следующие должны делать то, что вы хотите, но не могут быть пригодны в зависимости от размера файла и т.д. именно поэтому важно, чтобы дать контекст для такого рода вещи. Это самый быстрый способ, о котором я могу думать.

string[] lines = File.ReadAllLines(filePath); 
string joinedString = String.Format("{0} {1}", lines[0], lines[1]); 
Смежные вопросы