Komut dosyası göreve boş bir düz dosya olarak algılanıyor
Düz dosya kaynağını denemeden önce dosyayı işlemek, düz bir dosya veri satırı içeren olup olmadığını belirlemez.Paket, özellikle çok sayıda düz dosya üzerinde herhangi bir veri satırı içeren dosyaları'nı atlayarak yinelenen bir paketin verimliliğini artırmak isteyebilirsiniz.Komut dosyası görev önce boş bir düz dosya arayabilirsiniz paket veri akışı işlemeye başlar.
Not
Birden çok paket arasında daha kolay yeniden kullanabileceğiniz bir görev oluşturmak isterseniz, bu komut görevin örnek kodu özel bir görev için başlangıç noktası olarak kullanarak göz önünde bulundurun.Daha fazla bilgi için bkz:Özel görev geliştirme.
Açıklama
Aşağıdaki örnek yöntemleri kullanan System.ıo ad alanı olup olmadığını dosya boş veya yalnızca içerdiği olup olmadığını belirlemek için düz dosya Bağlantı Yöneticisi içinde belirtilen dosya düz sınamak için veri dışı satır, sütun başlıkları ya da boş bir satır bekleniyordu.Komut dosyasının boyutunu denetler; boyutu sıfır bayt, dosya boş.Dosya boyutunun sıfırdan büyükse, daha fazla satır kadar ya da satır sayısını, beklenen veri dışı satır sayısını aşıyor kadar komut satırı dosyadan okur.Dosyadaki satır sayısını, beklenen veri dışı satır sayısına eşit veya daha az ise, dosya boş düşünülür.Sonuç değeri, paketin denetim akışı dallanma için kullanılabilecek bir kullanıcı değişkenini bir Boole değer olarak döndürülür.The FireInformation method also displays the result in the Output window of the Microsoft Visual Studio Tools for Applications (VSTA).
Bu komut dosyası görev örnek yapılandırmak için
Oluşturma ve adlı düz dosya bir Bağlantı Yöneticisi'ni yapılandırma EmptyFlatFileTest.
Adlı bir tamsayı değişken oluşturun. FFNonDataRows ve küme değerine düz dosyasında beklenen veri dışı satır sayısı.
Adlı bir Boole değişkeni oluşturun. FFIsEmpty.
Ekleme FFNonDataRows komut dosyası görevin bir değişkene ReadOnlyVariables özellik.
Ekleme FFIsEmpty komut dosyası görevin bir değişkene ReadWriteVariables özellik.
Kodunuzda alma System.IO ad alanı.
Tek bir düz dosya Bağlantı Yöneticisi'ni kullanmak yerine bir Foreach dosya numaralayıcı ile dosyalar üzerinde yineleme, Enum değeri yerine, Bağlantı Yöneticisi ' saklanacağı değişkenin yol ve dosya adı'nı edinmek için aşağıdaki örnek kodu değiştirmeniz gerekir.
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;
}
|