Не удается разделить текстовый файл по разделителю | - PullRequest
3 голосов
/ 23 января 2009

Я использую C #.

Я пытаюсь вставить текстовый файл в объект. Я использую соединение ODBC, и это выглядит так

Driver = {Microsoft Text Driver (* .txt; * .csv)}; Dbq = C: \ Users \ Владелец \ Desktop \ IR \ IR_Files \ Absolute; Расширения = asc, csv, tab, txt;

Я могу установить соединение, но не могу разделить столбцы. Я использую файл schema.ini, но он не работает. Вот мой файл схемы.

[MyTextFile.CSV]
Формат = разделители (|)
ColNameHeader = False
Col1 = полный текст
col2 = текст FULLINFO
MaxScanRows = 0
CharacterSet = ANSI

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

fullstockn | FULLINFO

"555555" |

Contenu: Neuf Ttudes sur l Еще немного текста здесь .....

Ответы [ 5 ]

4 голосов
/ 23 января 2009

Я использую следующую строку подключения

string connectionString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"text;HDR=YES;Format=Delimited(|)\";", Path.GetDirectoryName(path));

и файл Schema.ini, который обычно начинается

[myFile.txt]
Format=Delimited(|)
TextDelimiter="none"

и я выполню ридер через

command.CommandText = String.Format("SELECT * FROM [{0}]", Path.GetFileName(path));
OleDbDataReader reader = command.ExecuteReader();

Кроме того, страница 10101 * MSDN в драйвере текстового файла была полезна, когда я впервые исследовал это. В частности, страница в файле Schema.ini весьма полезна.

0 голосов
/ 23 января 2009

Попробуйте использовать эту строку подключения

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Owner\Desktop\IR\IR_Files\Absolute\MyTextFile.CSV;Extended Properties='text'

и:

  • Остерегайтесь количества столбцов
  • Поместите файл schema.ini в ту же папку исполняемого файла.
0 голосов
/ 23 января 2009

Не знаю, имеет ли это значение, но ...

Возможно, вам не хватает окончания "\" в атрибуте dbq ...

РЕДАКТИРОВАТЬ: На самом деле ... в тексте, который вы опубликовали, у вас есть 3 столбца, а не 2 ... (2 трубы вместо 1)

0 голосов
/ 23 января 2009

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

public abstract class ReadTextFile : ILoadable
{
    public string Path { get; set; }
    public UploadFileType FileType { get; set; }
    protected internal List<List<string>> Table { get; set; }
    public Guid BatchID { get; set; }

    /// <summary>
    /// Method that loads the raw text into a collection of strings
    /// </summary>
    /// <returns></returns>
    public bool Load()
    {
        Table = new List<List<string>>();
        var splitter = Convert.ToChar("\t");
        try
        {
            using (TextReader tr = new StreamReader(Path))
            {
                // Discard the first line
                String line = tr.ReadLine();

                // Read and display lines from the file until the end of the file is reached.
                while ((line = tr.ReadLine()) != null)
                {
                    Table.Add(line.Split(splitter).ToList<string>());
                }
                tr.Close();
                tr.Dispose();
            }
            return true;

        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
            return false;
        }
    }
    public string Left(string param, int length)
    {
        //we start at 0 since we want to get the characters starting from the
        //left and with the specified lenght and assign it to a variable
        string result = param.Substring(0, length);
        //return the result of the operation
        return result;
    }
    public string Right(string param, int length)
    {
        //start at the index based on the lenght of the sting minus
        //the specified lenght and assign it a variable
        string result = param.Substring(param.Length - length, length);
        //return the result of the operation
        return result;
    }
}
0 голосов
/ 23 января 2009

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

...