Bagikan melalui


Mendeteksi File Datar Kosong dengan Tugas Skrip

Berlaku untuk: SQL Server SSIS Integration Runtime di Azure Data Factory

Sumber File Datar tidak menentukan apakah file datar berisi baris data sebelum mencoba memprosesnya. Anda mungkin ingin meningkatkan efisiensi paket, terutama paket yang melakukan iterasi atas banyak file datar, dengan melewatkan file yang tidak berisi baris data apa pun. Tugas Skrip dapat mencari file datar kosong sebelum paket mulai memproses aliran data.

Catatan

Jika Anda ingin membuat tugas yang dapat digunakan kembali dengan lebih mudah di beberapa paket, pertimbangkan untuk menggunakan kode dalam sampel tugas Skrip ini sebagai titik awal untuk tugas kustom. Untuk informasi selengkapnya, lihat Mengembangkan Tugas Kustom.

Deskripsi

Contoh berikut menggunakan metode dari namespace System.IO untuk menguji file datar yang ditentukan dalam manajer koneksi File Datar untuk menentukan apakah file kosong, atau apakah hanya berisi baris non-data yang diharapkan seperti header kolom atau baris kosong. Skrip memeriksa ukuran file terlebih dahulu; jika ukurannya nol byte, file kosong. Jika ukuran file lebih besar dari nol, skrip membaca baris dari file sampai tidak ada baris lagi, atau sampai jumlah baris melebihi jumlah baris non-data yang diharapkan. Jika jumlah baris dalam file kurang dari atau sama dengan jumlah baris non-data yang diharapkan, maka file dianggap kosong. Hasilnya dikembalikan sebagai nilai Boolean dalam variabel pengguna, yang nilainya dapat digunakan untuk percabangan dalam alur kontrol paket. Metode FireInformation juga menampilkan hasil di jendela Output Microsoft® Visual Studio® Tools for Applications (VSTA).

Untuk mengonfigurasi contoh Tugas Skrip ini

  1. Buat dan konfigurasikan manajer koneksi file datar bernama EmptyFlatFileTest.

  2. Buat variabel bilangan bulat bernama FFNonDataRows dan atur nilainya ke jumlah baris non-data yang diharapkan dalam file datar.

  3. Buat variabel Boolean bernama FFIsEmpty.

  4. FFNonDataRows Tambahkan variabel ke properti ReadOnlyVariables tugas Skrip.

  5. FFIsEmpty Tambahkan variabel ke properti ReadWriteVariables tugas Skrip.

  6. Dalam kode Anda, impor namespace System.IO .

Jika Anda melakukan iterasi file dengan enumerator File Foreach, alih-alih menggunakan satu manajer koneksi File Datar, Anda harus memodifikasi kode sampel di bawah ini untuk mendapatkan nama file dan jalur dari variabel tempat nilai enumerasi disimpan alih-alih dari manajer koneksi.

Kode

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;  
  
        }  

Lihat Juga

Contoh Tugas Skrip