Wykrywanie pusty plik płaski z zadań skryptu
plik prostyu źródło nie określić, czy plik płaski zawiera wiersze danych zanim spróbujesz go przetworzyć.Można poprawić wydajność pakietu, szczególnie pakiet, który wykonuje iterację przez wiele plików płaskich przez pominięcie pliki, które nie zawierają żadnych wierszy danych.Zadania skryptu można poszukać pusty plik prosty przed pakiet rozpoczęcia przetwarzania przepływ danych.
Ostrzeżenie
Aby utworzyć zadanie łatwiej można użyć ponownie w wielu pakietach, należy rozważyć przy użyciu kodu w tym przykładzie zadanie skryptu jako punktu wyjścia dla niestandardowego zadania.Aby uzyskać więcej informacji, zobacz Opracowywania niestandardowego zadania.
Opis
Poniższy przykład używa metody z System.IO obszaru nazw, aby przetestować plik prosty, określone w pliku prostego menedżer połączeń, aby określić, czy plik jest pusty lub czy zawiera on tylko wiersze danych innych niż oczekiwano, takich jak kolumna nagłówki lub pusty wiersz.Skrypt sprawdza najpierw; rozmiar pliku Jeśli rozmiar jest zero bajtów, plik jest pusty.Jeśli rozmiar pliku jest większa od zera, odczytuje wiersze z pliku do momentu Brak więcej wierszy, lub oczekiwaną liczbę wierszy danych nie przekracza liczbę wierszy.Jeśli liczba wierszy w pliku jest mniejsza niż oczekiwana liczba wierszy bez danych, następnie plik uznaje puste.Wyniki są zwracane jako wartość logiczna w zmiennej użytkownika, którego wartość może służyć do tworzenia odgałęzień w pakiet's sterowania przepływem.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 zestaw jej wartość liczby wierszy danych innych niż oczekiwano w pliku płaski.
Tworzenie zmiennej typu wartość logiczna, o nazwie FFIsEmpty.
Dodaj FFNonDataRows Zmienna zadania skryptu ReadOnlyVariables właściwość.
Dodaj FFIsEmpty Zmienna zadania skryptu ReadWriteVariables właściwość.
W kodzie, importowanie System.IO obszaru nazw.
Są Iterowanie nad plikami z modułu wyliczającego pliku Foreach, zamiast korzystać z jednego menedżer połączeń pliku prostego, należy zmodyfikować kod przykładowy poniżej, aby uzyskać nazwę pliku i ścieżka ze zmiennej, w której przechowywany jest stałego, zamiast z menedżer połączeń.
Kod
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;
}
|
Bieżąco z usług integracji