Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
SSIS Integration Runtime v rámci Azure Data Factory
Zdrojový kód plochého souboru neurčuje, zda plochý soubor obsahuje řádky dat, než se pokusí o jeho zpracování. Můžete chtít zvýšit efektivitu balíčku, zejména toho, který iteruje přes mnoho plochých souborů, tím, že přeskočíte soubory, které neobsahují žádné řádky dat. Skriptní úloha může hledat prázdný plochý soubor před tím, než balíček začne zpracovávat datový tok.
Note
Pokud chcete vytvořit úkol, který lze snadněji znovu použít napříč více balíčky, zvažte použití kódu v tomto ukázkovém skriptu úlohy jako výchozího bodu pro vlastní úkol. Další informace naleznete v tématu Vývoj vlastníhoúloh .
Description
Následující příklad využívá metody z jmenného prostoru System.IO k testování plochého souboru specifikovaného ve správci spojení plochých souborů, aby se zjistilo, zda je soubor prázdný, nebo zda obsahuje pouze očekávané nedatové řádky, jako jsou záhlaví sloupců nebo prázdný řádek. Skript nejprve zkontroluje velikost souboru; pokud je velikost nula bajtů, soubor je prázdný. Pokud je velikost souboru větší než nula, skript čte řádky ze souboru, dokud nezmizí další řádky, nebo dokud počet řádků nepřekročí očekávaný počet řádků mimo data. Pokud je počet řádků v souboru menší nebo roven očekávanému počtu řádků bez dat, pak je soubor považován za prázdný. Výsledek je vrácen jako Booleovská hodnota v uživatelské proměnné, jejíž hodnota může být použita pro větvení v řídicím toku balíčku. Metoda FireInformation také zobrazuje výsledky v okně Output v Microsoft Visual Studio Tools for Applications (VSTA).
Pro konfiguraci tohoto příkladu Script Task
Vytvořte a nakonfigurujte správce připojení plochých souborů s názvem EmptyFlatFileTest.
Vytvořte celočíselnou proměnnou pojmenovanou
FFNonDataRowsa nastavte její hodnotu na počet řádků bez dat, které se očekává v plochém souboru.Vytvořte Booleovskou proměnnou s názvem
FFIsEmpty.Přidejte proměnnou
FFNonDataRowsdo vlastnosti ReadOnlyVariables ve skriptové úlohě.Přidejte proměnnou
FFIsEmptydo vlastnosti ReadWriteVariables ve skriptním úkolu.Ve svém kódu importujte System.IO jmenný prostor.
Pokud procházíte soubory pomocí enumerátoru Foreach File místo použití jednoho správce spojení Flat File, budete muset upravit ukázkový kód níže, abyste získali název souboru a cestu z proměnné, ve které je enumerovaná hodnota uložena, místo ze správce spojení.
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;
}