2012-06-21 3 views
0

나는 하나의 텍스트 파일에서 2 개의 문자열을 결합하는 방법을 찾으려고 노력해 왔습니다. 내가 읽는 텍스트 파일의 형식은 다음과 같습니다.텍스트 파일에서 2 개 이상의 문자열을 결합하는 방법

String 1
String 2
String 3
... 등. 샘플 코드 : "문자열 1 문자열 2를"

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); 

내가 가지고 문자열 1 문자열 2를 추가 할 것입니다. split 메서드를 사용하여 문자열 빌더를 사용하여 추가했습니다. 그러나이 작업은 줄마다 분할 및 추가 작업을 수행하기 때문에 작동하지 않습니다. 나는 또한 사용하지 않는다 "." 변수에 저장되지 않기 때문에 결합 할 수 있습니다. 누구든지 이것을 달성하는 방법이나 예제를 알고 있습니까? 고맙습니다.
문자열 1 개
문자열이
문자열 3 ... 등 : 내가 읽고있다

+0

"단, 줄마다 추가 및 분할을 수행하기 때문에 작동하지 않습니다." – Dai

+3

코드 샘플을 제공하고 줄마다 분할로 인해 작동하지 않는다는 의미를 설명 할 수 있습니까? 파일을 읽는 방법에 따라 솔루션이 달라질 수 있습니다 ... – Chris

+0

죄송 합니다만, 문자열 내에 몇 가지 필드가 있음을 언급하지 않았습니다. 예 : 'name', 'id', 'city', 'state'. 그래서 나는 이것들을 쪼개서 하나의 문자열로 되돌릴 수 있지만 줄 단위로 줄 수있다. – Rick

답변

6

텍스트 파일의 형식은 다음과. 문자열 1에 문자열 2를 추가하고 싶습니다. "String1 String2". 당신이 그들 사이의 공간, 파일의 각 행을 추가하려는 경우

, 다음을 수행하십시오

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

파일의 라인 구조를 가지고 있다면, 당신은 클래스를 정의 할 수 있습니다 이 구조, 예를 잡아 :

,369 :이 클래스는 이러한 형식의 문자열을 각 행의 필드를 추출을 포맷하고 추가 할 수 있습니다

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]); 
관련 문제