Ввод текстового файла C # Многофайловый вывод - PullRequest
6 голосов
/ 21 мая 2011

У меня есть файл, который выглядит примерно так:

|29923C|SomeGuy,NameHere1     |00039252|042311|Some Address Info Here |
|47422K|SomeGuy,NameHere2     |00039252|042311|Some Address Info Here |
|98753D|SomeGuy,NameHere3     |00039252|042311|Some Address Info Here |
|29923C|SomeGuy,NameHere4     |00039252|042311|Some Address Info Here |
|47422K|SomeGuy,NameHere5     |00039252|042311|Some Address Info Here |

Мне нужно разбить файл на несколько файлов на основе первых 6 символов, начиная с позиции 2.

Файл 1 с именем 29923c.asc:

|29923C|SomeGuy,NameHere1     |00039252|042311|Some Address Info Here |
|29923C|SomeGuy,NameHere4     |00039252|042311|Some Address Info Here |

Файл 2 с именем 47422K.asc:

|47422K|SomeGuy,NameHere5     |00039252|042311|Some Address Info Here |
|47422K|SomeGuy,NameHere2     |00039252|042311|Some Address Info Here |

Файл 3 с именем 9875D.asc:

|98753D|SomeGuy,NameHere3     |00039252|042311|Some Address Info Here |

Я не знаю, что будет в файле до того, как программа его получит, просто формат. 6 цифр будут меняться в зависимости от клиента. Я не знаю, кем они будут.

Единственное, что я знаю, это формат.

Может ли кто-нибудь дать мне совет относительно того, как динамически получать \ сохранять эту информацию, чтобы я мог разобрать ее в отдельные файлы?

Ответы [ 4 ]

4 голосов
/ 21 мая 2011

Я предлагаю использовать синтаксический анализатор, такой как класс TextFieldParser.

Вы можете прочитать данные в память, отсортировать их, используя первое поле, а затем записать отдельные файлы.

2 голосов
/ 21 мая 2011
List<string> lines ; // load lines form file

Dictionary<string,List<string>> dic = new Dictionary<string,List<string>>();
foreach(string line in lines) 
{
    string key = line.Split('|')[0];

    if(!dic.ContainsKey(key))
        dic.Add(key,new List<string>{line});
    else 
        dic[key].Add(line) 
}

foreach(var pair in dic) 
{
    //create file and store there pair.Value   
}
1 голос
/ 21 мая 2011

Читать построчно.Получить код из каждой строки и создать файл, поместить ссылку на открытый поток файлов в словарь с кодом в качестве ключа.В каждой следующей строке проверяйте словарь на наличие ключа и используйте открытый поток или создайте новый.После прочтения всего файла закройте все потоки.

Этот алгоритм не позволит использовать слишком много памяти для строк файла, если он имеет большой размер.

Для анализа каждой строки вы можете просто использовать RegEx,например.

0 голосов
/ 21 мая 2011

Вы можете сделать это методом грубой силы.

Чтение:

Dictionary<string, List<string>> DICT;
Until End of File {
   Read a line to LINE
   Read characters 1-7 in LINE to CUSTOMERID
   DICT[CUSTOMERID].Add(LINE);
}

Запись:

foreach KeyValuePair entry in DICT {
   Create file with name entry.Key
   foreach string line in entry.Value {
      Write line to file line
   }
}
...