Как читать файлы CSV построчно в VBScript

Я использую страницу ASP, где мне нужно прочитать файл CSV и вставить его в таблицу БД «Сотрудник». Я создаю объект TestReader. Как я могу написать цикл для выполнения до количества строк/записей читаемого файла CSV?


person Community    schedule 17.10.2008    source источник


Ответы (2)


Не пытайтесь разобрать файл самостоятельно, вы только создадите себе головную боль. Это немного больше, чем разделение на новую строку и запятые.

Вы можете использовать OLEDB, чтобы открыть файл в наборе записей и прочитать его так же, как и таблицу БД. Что-то вроде этого:

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 заржавел, поэтому проверьте синтаксис.

edit: комментарий harpo поднимает хороший вопрос об определениях полей. Определение файла schema.ini позволяет определить количество и типы данных ожидаемых полей. См.: Вы можете справиться с этим, определив файл schema.ini. см.: http://msdn.microsoft.com/en-us/library/ms709353.aspx

person jeff.willis    schedule 17.10.2008
comment
Осторожно: количество полей основано на первой строке. Таким образом, если количество полей увеличивается в какой-либо точке файла, вы не можете захватить дополнительные поля. В моем случае это имело значение, поэтому я накатил свой собственный (хотя и не на VBScript). - person harpo; 26.03.2009
comment
Это верно. Вы можете обойти это ограничение, определив файл schema.ini (msdn.microsoft.com). /en-us/library/ms709353.aspx). Это также позволяет вам определять типы данных полей (по умолчанию «0001» будет читаться как «1»). - person jeff.willis; 28.03.2009
comment
Вам нужна точка с запятой после пути к папке — Server.MapPath (путь к папке;) — но это только что сэкономило мне часы попыток разобрать мой CSV-файл — спасибо! - person whostolemyhat; 24.01.2011
comment
Имейте в виду, что программа чтения JET CSV использует для синтаксического анализа языковой стандарт машины по умолчанию, даже если ваше приложение ASP установило другой языковой стандарт, например. для форматов даты. Таким образом, при анализе дат с помощью этого метода вы можете получить 1 декабря 2014 года как 12 января 2014 года! - person James McCormack; 01.12.2014
comment
Отличное решение, но мне пришлось применить другой формат к Extended Properties, иначе возникнет исключение Format of the initialization string does not conform to the OLE DB specification.. Вместо этого используйте Extended Properties=""text;HDR=Yes;FMT=Delimited"", чтобы избежать этого исключения. - person ViRuSTriNiTy; 14.09.2016

Почему бы просто не вставить CSV? Например:

SELECT * INTO MyTable FROM OPENDATASOURCE('Microsoft.JET.OLEDB.4.0', 
'Data Source=F:\MyDirectory;Extended Properties="text;HDR=No"')...
[MyCsvFile#csv]

Из: http://coding.derkeiler.com/Archive/Delphi/borland.public.delphi.database.ado/2007-05/msg00057.html

person Fionnuala    schedule 17.10.2008