2008-10-17 27 views
9

'da CSV dosyaları satır satırında nasıl okurum? Bir CSV dosyasını okumak ve "Çalışan" DB tablosuna eklemek zorunda olduğum bir ASP sayfası kullanıyorum. TestReader'ın bir nesnesini oluşturuyorum. Okunan CSV dosyasının satır/kayıt sayısına kadar yürütmek için nasıl döngü yazabilirim?VBScript

cevap

15

Dosyayı kendiniz ayrıştırmaya çalışmayın, sadece başınızı ağrıtıyorsunuz. Yeni satır ve virgüllere ayırmaktan çok daha fazlası var.

Dosyayı bir kayıt kümesinde açmak ve bir db tablosu gibi okumak için OLEDB kullanabilirsiniz. Böyle bir şey:

Dim strConn, conn, rs 

strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ 
Server.MapPath("path to folder") & ";Extended Properties='text;HDR=Yes;FMT-Delimited';" 

Set conn = Server.CreateObject("ADODB.Connection") 
conn.Open strConn 

Set rs = Server.CreateObject("ADODB.recordset") 
rs.open "SELECT * FROM myfile.csv", conn 

while not rs.eof 
    ... 
    rs.movenext 
wend 

VBScript paslı, bu yüzden sözdizimini doğrulayın.

düzenleme: harpo'nun yorumu, alan tanımları hakkında iyi bir bakış açısı getiriyor. Bir schema.ini dosyasının tanımlanması, beklenen alanların sayısını ve veri tiplerini tanımlamanıza olanak tanır. Bakınız: Bir schema.ini dosyası tanımlayarak bunu halledebilirsiniz. bkz .: http://msdn.microsoft.com/en-us/library/ms709353.aspx

+0

Dikkat: alanına sayımı ilk satırda dayanmaktadır. Bu nedenle, alan sayısı dosyadaki herhangi bir noktada artarsa, ek alanları yakalayamazsınız. Bu benim durumumda önemliydi, ben de kendiminkini yaptım (VBScript'te olmasa da). – harpo

+0

Bu doğrudur. Bir schema.ini dosyasını (http://msdn.microsoft.com/en-us/library/ms709353.aspx) tanımlayarak bu sınırlamayı önleyebilirsiniz. Bu ayrıca alanların veri türlerini (varsayılan olarak '0001', '1' olarak okunur) sağlar. –

+0

Klasör yolundan sonra bir yarım virgül istersiniz - Server.MapPath ("klasöre yol";) - ama bu sadece bana CSV dosyamı ayrıştırmaya çalışıyorum saatlerimi kurtardı - teşekkürler! – whostolemyhat