Detecting an Empty Flat File with the Script Task
Płaski plikowe urządzenie źródłowe nie określa, czy plik prosty zawiera wiersze danych przed podjęciem próby przetworzenia go.Można poprawić wydajność pakietu, szczególnie, pakiet, który wykonuje iteracje, na wiele plików płaskich, przez pominięcie pliki, które nie zawierają żadnych wierszy danych.Zadanie skryptów mogą szukać pusty plik prosty, przed rozpoczęciem tego pakiet do przetwarzania przepływ danych.
Uwaga
Jeśli chcesz utworzyć zadanie, które łatwo można używać w wielu pakietów, należy rozważyć przy użyciu kodu w tym przykładzie skrypt zadanie jako punkt początkowy dla niestandardowego zadania.Aby uzyskać więcej informacji zobaczOpracowywania niestandardowego zadania.
Description
W poniższym przykładzie użyto metody z System.IO obszaru nazw, aby przetestować plik prosty, określone w Menedżerze połączeń plik prosty, aby ustalić, czy plik jest pusty lub czy zawiera ona tylko oczekiwano danych innych niż wierszy, takie jak nagłówki kolumn lub pusty wiersz.Najpierw sprawdza rozmiar pliku skryptu, jeśli rozmiar wynosi zero bajtów, plik jest pusty.Jeśli rozmiar pliku jest większa od zera, skrypt odczytuje wiersze z pliku, dopóki Brak więcej wierszy lub dopóki oczekiwana liczba wierszy danych nie przekracza liczbę wierszy.Jeśli liczba wierszy w pliku jest mniejsza niż oczekiwana liczba wierszy danych innych niż, następnie plik jest traktowana jako puste.Wynik jest zwracany jako logiczny w zmiennej użytkownika, których wartość może służyć do branching w przepływ sterowania do pakiet.The FireInformation method also displays the result in the Output window of the Microsoft Visual Studio Tools for Applications (VSTA).
Aby skonfigurować ten przykład zadania skryptu
Tworzenie i Konfigurowanie menedżer połączeń plik prosty o nazwie EmptyFlatFileTest.
Tworzenie zmiennej całkowitą o nazwie FFNonDataRows i ustawić jej wartość na liczbę wierszy danych innych niż oczekiwano plik prosty.
Tworzenie logicznych zmienną o nazwie FFIsEmpty.
Dodawanie FFNonDataRows Zmienna z zadań skryptów ReadOnlyVariables właściwość.
Dodawanie FFIsEmpty Zmienna z zadań skryptów ReadWriteVariables właściwość.
W kodzie, importowanie System.IO obszar nazw.
Iterowanie poprzez pliki z modułu wyliczającego pliku Foreach, zamiast korzystać z jednego menedżer połączeń plik prosty, należy zmodyfikować kod przykładowy poniżej, aby uzyskać nazwę pliku i ścieżka ze zmiennej, w którym przechowywany jest wartość tekstu stałego, a nie z menedżer połączeń.
Code
Public Sub Main()
Dim nonDataRows As Integer = _
DirectCast(Dts.Variables("FFNonDataRows").Value, Integer)
Dim ffConnection As String = _
DirectCast(Dts.Connections("EmptyFlatFileTest").AcquireConnection(Nothing), _
String)
Dim flatFileInfo As New FileInfo(ffConnection)
' If file size is 0 bytes, flat file does not contain data.
Dim fileSize As Long = flatFileInfo.Length
If fileSize > 0 Then
Dim lineCount As Integer = 0
Dim line As String
Dim fsFlatFile As New StreamReader(ffConnection)
Do Until fsFlatFile.EndOfStream
line = fsFlatFile.ReadLine
lineCount += 1
' If line count > expected number of non-data rows,
' flat file contains data (default value).
If lineCount > nonDataRows Then
Exit Do
End If
' If line count <= expected number of non-data rows,
' flat file does not contain data.
If lineCount <= nonDataRows Then
Dts.Variables("FFIsEmpty").Value = True
End If
Loop
Else
Dts.Variables("FFIsEmpty").Value = True
End If
Dim fireAgain As Boolean = False
Dts.Events.FireInformation(0, "Script Task", _
String.Format("{0}: {1}", ffConnection, _
Dts.Variables("FFIsEmpty").Value.ToString), _
String.Empty, 0, fireAgain)
Dts.TaskResult = ScriptResults.Success
End Sub
public void Main()
{
int nonDataRows = (int)(Dts.Variables["FFNonDataRows"].Value);
string ffConnection = (string)(Dts.Connections["EmptyFlatFileTest"].AcquireConnection(null) as String);
FileInfo flatFileInfo = new FileInfo(ffConnection);
// If file size is 0 bytes, flat file does not contain data.
long fileSize = flatFileInfo.Length;
if (fileSize > 0)
{
int lineCount = 0;
string line;
StreamReader fsFlatFile = new StreamReader(ffConnection);
while (!(fsFlatFile.EndOfStream))
{
Console.WriteLine (fsFlatFile.ReadLine());
lineCount += 1;
// If line count > expected number of non-data rows,
// flat file contains data (default value).
if (lineCount > nonDataRows)
{
break;
}
// If line count <= expected number of non-data rows,
// flat file does not contain data.
if (lineCount <= nonDataRows)
{
Dts.Variables["FFIsEmpty"].Value = true;
}
}
}
else
{
Dts.Variables["FFIsEmpty"].Value = true;
}
bool fireAgain = false;
Dts.Events.FireInformation(0, "Script Task", String.Format("{0}: {1}", ffConnection, Dts.Variables["FFIsEmpty"].Value), String.Empty, 0, ref fireAgain);
Dts.TaskResult = (int)ScriptResults.Success;
}
|
Konfiguracja w aktualizacji z usług integracja Services pobytu