sai.2012 Ответов: 1

Проблема при чтении текстового файла сохраните его в csv-файл на C#?


Привет ,

У меня есть формат текстового файла, как показано ниже. Я сохраняю в csv-файл на языке c#.
//нужно проигнорировать строку пары разрешений персонала,строку учетных данных в текстовом файле.
Доступ к текстовому файлу:
Название:,4-й этаж, IT
Пара Допуска Персонала
Название оформление: это
Учетные данные
Номер карты:,1234

Имя: Грэм, Джон
Пара Допуска Персонала
Название зазор:,темпы
Учетные данные
Номер карты:,23489

Я зацикливаюсь на текстовом файле, как показано ниже
try
 {
System.IO.TextWriter Summarytw = System.IO.File.CreateText(sOutputFilePath + sOutFileName_DST);

//Here I am adding column names to csv file(output file).
                string line1 = string.Empty;
                string strColumnname = string.Empty;//{"Name","Clearance name","Card number"};
                strColumnname = "Name,Clearance name,Card number";
                string[] arr = strColumnname.Split(',');
                int a = arr.Length;

                for (int y = 0; y < arr.Length; y++)
                {
                    line += arr[y].ToString() + ",";
                }
                Summarytw.WriteLine(line);

//here I am reading the text file(input file)
  using (System.IO.StreamReader sr = new System.IO.StreamReader(sInputPath + sInFile))
                {

                    while ((line = sr.ReadLine()) != null)
                    {
//I need to save only name, clearance name, card number values to the csv file.
 if ((line.Contains("Name")) || (line.Contains("Clearance name")) || (line.Contains("Card number")))
                        {
                            string s = line.ToString();
                            string pattern = ":,";
                            string strdelimiter = ",";
                            string[] substrings = Regex.Split(line, pattern);
                            for (int i = 1; i < substrings.Length; i++)
                            {
                                string value = substrings[1].ToString();
                                if (i == substrings.Length)
                                {
                                    strconcat += " " + value + " ";
                                }
                                else
                                {
                                    strconcat += "\" " + value + "\"";
                                    strconcat += strdelimiter;
                                }

                            }


                        }


                        if (line.StartsWith("Card number"))
                        {
                            strconcat += Environment.NewLine;
                        }


                    }

                    Summarytw.WriteLine(strconcat);
                }
}


для приведенной выше строки в Access.txt код у него работал нормально.

но если данные такие как показано ниже

Name:,lori, Julie
Personnel Clearance Pair
Clearance name:,Access Full Time Employees //No card number row
Credential 

Name:,Badge 43511, Visitor
Personnel Clearance Pair//No clearance name row
Credential
Card number:,43511


если нет номера карты или имени разрешения, то csv-файл выглядит следующим образом.
ACCESS.CSV:
Имя разрешение имя номер карты
4-й этаж, это он 1234
Грэм, Джон Темпс 23489
Лори, Джули доступ (если нет номера карты, то он помещается со следующими деталями записи)
Значок 56892 56892 (если имя разрешения пустое, то номер карты сохраняется в поле Имя разрешения в csv-файле.)

Данные текстового файла строчны .

Как прочитать и сохранить его в csv-файл

Что я уже пробовал:

Перепробовал много вещей, но потерпел неудачу.
поискал в google, но не нашел правильного ответа.
Пожалуйста, помогите мне.
Спасибо, неосторожность.

j snooze

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

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

1 Ответов

Рейтинг:
0

msn hotmail

Но в случае, если всегда есть имя, вы можете проверить, является ли текущая строка, которую вы проверяете, именем. ... если это конкатенационная среда.Новая строка, предшествующая добавлению имени и следующих полей рядом с линией, разделенной запятыми. Таким образом, вам никогда не придется беспокоиться, когда после этого не будет несуществующей дисциплины. В случае, если это имеет значение, вы можете проверить, является ли это начальным листингом, и, возможно, не добавлять совершенно новую строку до самого первого названия.