Udostępnij przez


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

  1. Tworzenie i Konfigurowanie menedżer połączeń plik prosty o nazwie EmptyFlatFileTest.

  2. Tworzenie zmiennej całkowitą o nazwie FFNonDataRows i ustawić jej wartość na liczbę wierszy danych innych niż oczekiwano plik prosty.

  3. Tworzenie logicznych zmienną o nazwie FFIsEmpty.

  4. Dodawanie FFNonDataRows Zmienna z zadań skryptów ReadOnlyVariables właściwość.

  5. Dodawanie FFIsEmpty Zmienna z zadań skryptów ReadWriteVariables właściwość.

  6. 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;


        }
Integration Services icon (small) Konfiguracja w aktualizacji z usług integracja Services pobytu

Najnowsze pliki do pobrania, artykuły, próbki, i pliki wideo firmy Microsoft, jak również wybranego rozwiązania od Wspólnoty, odwiedź witrynę Integration Services strona w witrynie MSDN lub TechNet:

Automatycznego powiadomienie tych aktualizacji należy subskrybować źródła danych RSS, które jest dostępne strona.

See Also

Concepts