2013-12-22 9 views
0

Итак, я знаю, что мой заголовок немного запутан, я объясню.Прочтите текстовый файл и разделите его на

Мой код выглядит следующим образом:

string filename = "C:\\C#\\maplist.txt"; // please put the text file path. 
string filename2 = "C:\\C#\\zemaplist.txt"; 
string map; 
StreamReader sr = new StreamReader(filename); 
StreamWriter sw = new StreamWriter(filename2); 
List<string> maps = new List<string> { }; 
while ((map = sr.ReadLine()) != null) 
{ 
    maps.Add(map); 
} 
sr.Close(); 
for (int i = 0; i < maps.Count; i++) 
{ 
    Console.WriteLine(maps[i]); 
    sw.WriteLine(maps[i]); 
} 
sw.Close(); 

и то, что мне нужно сделать, это когда код чтения новой строки, в моей линии есть

«Эй, Эй»

Я хочу разделить , друг на друга, поэтому я могу взять оба из них как другие параметры, так что первые Hey будут добавлены к maps, а другой hey будет maps2,

Как это сделать?

+0

Вместо 'StreamReader' вы можете использовать' File.ReadAllLines() – Liel

+0

ли это тривиальное или вы просто используете пример? Вы хотите разбить каждое событие «X, X» в вашем файле? – danish

ответ

2

Вы можете использовать функцию Split() для разделения данной строки на основе разделителя.

Попробуйте:

while ((map = sr.ReadLine()) != null) 
{ 
    maps.Add(map.Split(',')[0].Trim()); 
    maps2.Add(map.Split(',')[1].Trim()); 
} 

Простой код:

using System.IO; 

string filename = "C:\\C#\\maplist.txt"; // please put the text file path. 
string filename2 = "C:\\C#\\zemaplist.txt"; 
string map; 

StreamWriter sw = new StreamWriter(filename2); 
List<string> maps = new List<string> { }; 
List<string> maps2 = new List<string> { }; 
String [] allLines = File.ReadAllLines(filename); 
foreach(String line in allLines) 
{ 
    maps.Add(line.Split(',')[0].Trim()); 
    maps2.Add(line.Split(',')[1].Trim()); 
} 


for (int i = 0; i < maps.Count; i++) 
{ 
    Console.WriteLine(maps[i]); 
    sw.WriteLine(maps[i]); 
} 
sw.Close(); 

Решение 2:

String mapItem1=""; 
String mapItem2=""; 
if(maps.Count == maps2.Count) 
{ 
    for(int i=0;i<maps.Count;i++) 
    { 
     mapItem1=maps[i]; 
     mapItem2=maps2[i]; 
    } 
} 
+0

Прочитайте другие мои комментарии. – danish

+0

@danish: Спасибо, вы имели в виду, что OP хочет разбить подобные слова? –

+0

Нет, я этого не говорю. Я говорю, что этот вопрос недостаточно ясен. – danish

2
while ((map = sr.ReadLine()) != null) 
{ 
    string[] split = map.Split(','); 
    //First Hey would be split[0], second Hey would be split[1] 


    maps.Add(split[0].Trim()); 
    maps2.Add(split[1].Trim()); 
} 

Метод Split должен помочь вам в этом.

Если вы хотите обрезать ведущие пробельные символы, вы можете использовать метод .Trim() для строки.

+0

Нет. «Эй, ты хорош», не получается с вашим кодом, предполагая, что OP хочет разделить похожие слова, разделенные запятой. – danish

+0

Что вы подразумеваете под словом «не удается?» скажите мне еще? – kdh

+0

ОП, в его вопросе используется «Эй, Эй».Это может означать, что нам нужно разделить те же слова, разделенные запятой. Ваш код не может этого сделать. – danish

-1

Зачем даже читать строки за строкой? Прочитайте весь файл, замените новые строковые символы на «,» (чтобы предотвратить, чтобы последние и первые элементы из разных строк обрабатывались как один) и прокручивали чистую строку.

string fileContent = Regex.Replace(File.ReadAllText("test.txt"), @"\r", ","); 
List<string> mapList = new List<string>(); 

foreach (string map in Regex.Split(fileContent.Replace(@"\s+", ""), ",")) 
{ 
    mapList.Add(map.Trim()); 
}    
+0

Спасибо за фиксированное форматирование. –

+0

Этот способ чтения файла дороже по сравнению с Stream. – danish

+0

Разве у нас нет преждевременной оптимизации? Учитывая длину файла, описанного автором, это именно то, к чему этот метод следует использовать, не так ли? Простые, не-гигантские файлы. –

1

Split().

string heys = "Hey,Hey"; 
string[] splitArray = heys.Split(','); 

Тогда у вас есть:

splitArray[0] = "Hey"; 
splitArray[1] = "Hey"; 
Смежные вопросы