Udostępnij przez


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

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

  2. Tworzenie zmiennej całkowitą o nazwie FFNonDataRows i zestaw jej wartość liczby wierszy danych innych niż oczekiwano w pliku płaski.

  3. Tworzenie zmiennej typu wartość logiczna, o nazwie FFIsEmpty.

  4. Dodaj FFNonDataRows Zmienna zadania skryptu ReadOnlyVariables właściwość.

  5. Dodaj FFIsEmpty Zmienna zadania skryptu ReadWriteVariables właściwość.

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


        }
Ikona usług Integration Services (mała)Bieżąco z usług integracji

Najnowsze pliki do pobrania, artykuły, próbki i wideo firmy Microsoft, jak również wybranych rozwiązań ze Wspólnoty, odwiedź witrynę Integration Services strona na MSDN i TechNet:

Aby otrzymywać automatyczne powiadomienia dotyczące tych aktualizacji, zasubskrybuj źródła danych RSS dostępne na tej stronie.

Zobacz także

Koncepcje