Не удается разделить текстовый файл С помощью Разделителя |
-
19-08-2019 - |
Вопрос
Я использую C #.
Я пытаюсь перенести текстовый файл в объект.Я использую ODBC-соединение, и оно выглядит примерно так
Драйвер={Текстовый драйвер Microsoft (*.txt;*.csv)};Dbq=C:\Users\Owner\Desktop\IR\IR_Files\Absolute;Расширения=asc,csv, tab,txt;
Я могу установить соединение, но я не могу разделить свои столбцы.Я использую файл schema.ini, но он не работает.Вот мой файл схемы.
[MyTextFile.CSV] [Текстовый файл.CSV]
Формат=С разделителями(|)
Заголовок столбца=False
Col1=полный текст stockn
col2=ПОЛНЫЙ текст по УМОЛЧАНИЮ
Максимальное количество просмотров=0
Набор символов=ANSI
Текстовый файл выглядит следующим образом.
полный запас|FULLINFO
"555555 "|
Contenu :Не удалось изучить здесь еще немного текста.....
Решение
Я использую следующую строку подключения
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();
Кроме того, в Страница MSDN драйвер текстового файла был полезен, когда я впервые исследовал это.В частности, в Страница на Schema.ini
файл весьма полезен.
Другие советы
Есть ли причина, по которой вам нужно использовать ODBC-соединение для этого?Я бы подумал, что было бы проще просто открыть текстовый файл напрямую и разобрать его самостоятельно.
Я не знаю, имеет ли это значение, но...
Возможно, вам не хватает окончания "\" в вашем атрибуте dbq...
Редактировать:Actually...in в тексте, который вы опубликовали, у вас 3 столбца, а не 2 ... (2 канала вместо 1)
Я всегда сам пишу код для такого рода операций.Вот пример абстрактного класса, который я написал для этой цели не так давно.Вы могли бы изменить его или подклассировать, если хотите
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;
}
}
Попробуйте использовать эту строку подключения
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Owner\Desktop\IR\IR_Files\Absolute\MyTextFile.CSV;Extended Properties='text'
и:
- Остерегайтесь количества столбцов
- Поместите schema.ini в ту же папку, что и исполняемый файл.