#sql-server #ssis #flat-file #dataflow
#sql-сервер #ssis #плоский файл #поток данных
Вопрос:
Мне трудно выполнить простую загрузку данных из плоского файла в базу данных. Проблема в том, что в этом текстовом файле есть неверные строки или, по крайней мере, строки, которые не отформатированы как данные.
Sample.txt:
Stackoverflow School at Philippines
Record: 100101
Date: 6/20/2014
Name: Age: About:
-------------------- --- --------------------------
Coolai 19 Bad Row Question
Qwerty 17 Java
Qwerty 19 C#
*User1 21 Dynamic Data
User4 27 Assembly
Stackoverflow School at Nippon
Record: 100102
Date: 6/23/2014
Name: Age: About:
-------------------- --- --------------------------
Sayuri 19 MSSQL
Niwatori 21 Dynamic Data
Jagaimo 27 Assembly
*User7 21 Dynamic Data
User9 27 Assembly
Я использую формат фиксированной ширины для соединения с плоским файлом и попытался решить проблему с помощью условного разделения, но как только он попадает в пробел, загрузка данных прекращается.
Возможно ли загружать данные в зависимости от определенного количества строк? Потому что, в конце концов, это единственное, что я хочу от текстового файла:
Coolai 19 Bad Row Question
Qwerty 17 Java
Qwerty 19 C#
User1 21 Dynamic Data
User4 27 Assembly
Sayuri 19 MSSQL
Niwatori 21 Dynamic Data
Jagaimo 27 Assembly
User7 21 Dynamic Data
User9 27 Assembly
Sample.txt ссылка на файл.
Комментарии:
1. Что такое разделитель строк заголовка? Какую ширину вы определили для фиксированной ширины?
2. Разделитель строки заголовка @Raj равен: {CR}{LF}, а ширина строки, вероятно, равна 51.
3. Можете ли вы прикрепить сюда исходный текстовый файл? При ширине столбца 51 я получаю разорванные строки
4. Обновление — прикреплен текстовый файл :]
Ответ №1:
Поскольку исходный текстовый файл не соответствует стандарту формата с разделителями, вам необходимо использовать script task и написать пользовательский скрипт для обработки всех этих пробелов и неверных данных. Вам необходимо преобразовать текстовый файл в некоторый формат с разделителями, после чего его можно будет обработать в соответствии с требованиями.
Логика задачи скрипта — читать файл построчно и указывать логику, когда пропускать, когда выполнение попадает в неправильную строку / данные. При выполнении этого результат будет в стандартном формате с разделителями.
Попробуйте приведенный ниже код в скрипте, вы можете использовать извлеченные данные из List<string> goodData
string line;
bool isNextLineGoodData = false;
List<string> goodData = new List<string>();
// Read the file and display it line by line.
System.IO.StreamReader file = new System.IO.StreamReader("c:\csv.txt");
while ((line = file.ReadLine()) != null)
{
if (isNextLineGoodData)
{
if (line=="")
{
isNextLineGoodData = false;
}
else
{
goodData.Add(line);
}
}
if (line=="")
{
isNextLineGoodData = false;
}
if (line.StartsWith("---"))
{
isNextLineGoodData = true;
}
}
file.Close();
Комментарии:
1. Спасибо за ответ, я попробую!