2012-05-24 21 views
8

LOL'leri EOL olan bir metin dosyası aldığım bir soruna çalışıyorum. Bazen dosyayı ERL olarak CRLF'lerle gönderirler. SSIS’in EOL’i nasıl kullanabileceğine dair iyi bir fikri olan var mı?CRLF veya LF ile SSIS ile bir metin dosyası okuma

Notepad ++ ile çok kolay bir dönüştürme işlemi, ihtiyacım olana kadar değiştirmek, ancak manuel olması ve otomatik olmasını istiyorum.

Sağol,

EDIT. Veri akışından önce Swiss File Knife kullanarak düzeltdim (ancak mükemmel değil).

cevap

1

ikinci Swiss Dosya Bıçak OP'ın oy.

o bütünleştirmek için, ben bir yürütme Süreci Görev eklemek zorunda: Ancak exeproc

, ben İçin-Her-File döngüler çalıştırmak paketlerin bir grup var, bu yüzden biraz BIML gerekli - belki bu olacak Bir sonraki ruhuna yardım et.

<ExecuteProcess Name="(EXE) Convert crlf for <#= tableName #>" 
       Executable="<#= myExeFolder #>sfk.exe"> 
    <Expressions> 
    <Expression PropertyName="Arguments"> 
     "crlf-to-lf " + @[User::sFullFilePath] 
    </Expression> 
    </Expressions> 
</ExecuteProcess> 
1

Dosya kaynağınızdan sonra CRLF'leri LF'lere değiştirmek için REPLACE işlemiyle türetilmiş bir sütun hakkında ne dersiniz?

+1

Yalnızca bununla ilgili bir sorun, Veri Akışında Türetilmiş Sütun Dönüşümü kullanmadan ÖNCE Dosya Bağlantı Yöneticisi'ni kullanarak dosyayı yüklemeniz gerekir. – GShenanigan

6

Hat sonlandırıcılar her zaman bir veya diğeriyse, biri "CRLF" satır sınırlayıcısı, diğeri "LF" satır sınırlayıcısı olan 2 Dosya Bağlantısı Yöneticisi kurmanızı öneririm. Ardından, bir boolean paket değişkeni (@IsCrLf gibi bir şey) oluşturun ve bunu paketinize göre düzenleyin. SSIS paketinizde ilk adımı bir dosya akışında okuduğunuz ve satır sonlayıcısının ne olduğunu (akışta bulduğunuzya göre) keşfetmeye çalıştığınız bir Script Task yapın. Değişkeninizin değerini buna göre ayarlayın. Daha sonra, Denetim Akışınızdaki Komut Dosyası Görevinden sonra, 2 Veri Akışı (her Dosya Bağlantısı Yöneticisi için bir tane) oluşturun ve kullanılacak Veri Akışını belirtmek üzere bağlaçlar üzerinde "İfade ve Kısıtlama" olarak ayarlanmış bir Precedence Constraint kullanın. @IsCrLf değişkeninin değerine bağlı olarak.

Aşağıdaki Önerilen Kontrol Akışı örneği.

Example SSIS Control Flow

+0

Güzel bitti. Ben basitlik uğruna sence de SwissFileKnife ile sadık kalacağım. Düz dosyadan sonra veri akışı adımları oldukça uzun ve karmaşıktır ve mantığı çoğaltmayı tercih etmem. –

+0

Büyük dosyalar değilse, Komut Dosyası Görevinizde olabilirsiniz, tüm dosyayı bellekte tutulan bir nesne değişkenine yükleyin ve bunu bir Komut Dosyası Kaynağı kullanarak tek bir Veri Akışına aktarın. Ancak bununla birlikte SwissFileKnife üzerinde bunun bir avantajı yoktur. Bu güzel bir yardımcı program, kesinlikle kontrol ediyor! – GShenanigan

+1

Bu geçerli bir çözüm olsa da, sadece ben mi yoksa SSIS'den nefret etmenin başka bir nedeni mi? –

İlgili konular