Я не очень знаком с VBA, но потребностью использовать его для новой программы, которую я использую (не связанная Microsoft)
У меня есть текстовый файл, который имеет столбцы данных, которые я хотел бы считать в VBA.
Конкретно текстовый файл имеет 4 записи на строку. Таким образом я хотел бы загрузиться в векторах - столбцах (N на 1).
Текстовый файл разделяется пространством между каждой записью.
Так, например, я хочу загрузиться в столбце один и сохранить его как массив A, затем столбец два и сохранить как массив B, затем столбец три и сохранить как массив C и затем столбец четыре и сохранить как массив D.
Этот фрагмент кода, найденный ниже из http://www.tek-tips.com/faqs.cfm?fid=482, является чем-то, что я нашел, что это может загрузиться в тексте к массиву, но я должен адаптировать его, чтобы смочь сохранить столбцы как различные массивы, как указано выше...
Open "MyFile.txt" For Input As #1
ReDim Txt$(0)
Do While Not EOF(1)
ReDim Preserve Txt$(UBound(Txt$) + 1)
Input #1, Txt$(UBound(Txt$))
Loop
Close #1
В вашем вопросе есть несколько деталей, но я бы посоветовал использовать «Текст в столбец»
Если вы не очень знакомы с программированием на VBA, попробуйте записать макрос, выполнив следующие действия:
Таким образом, вы получите массив данных, которые вы запрашивали, теперь присвоение любых переменных, которые вы хотите, не должно быть проблема.
РЕДАКТИРОВАТЬ (без использования Excel):
Взгляните на метод FSO .
, заменив
MsgBox strLing
какой-то функцией разделения, например
strTemp = Split(strLine, " ")
. Вы сможете перебирать все значения в исходном файле, это сработает?
В этом примере вам понадобится файл schema.ini в том же каталоге, что и текстовый файл. Он должен содержать:
[Import.txt]
Format=Delimited( )
Где Import.txt - имя файла ( http://msdn.microsoft.com/en-us/library/ms709353 (VS.85) .aspx ).
Затем вы можете использовать это, которое должно работать в VBScript или VBA с минимальным вмешательством:
Set cn = CreateObject("ADODB.Connection")
'Note HDR=Yes, that is, first row contains field names '
'and FMT delimted, ie CSV '
strCon="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Docs\;" _
& "Extended Properties=""text;HDR=Yes;FMT=Delimited"";"
cn.Open strcon
strSQL="SELECT * FROM Import.txt" _
set rs = createobject("adodb.recordset")
rs.open strSQL,cn
MsgBox rs(2)
MsgBox rs.GetString
Первое окно сообщения должно возвращать третий столбец первой строки, это проверка того, что оно работает.
Второе окно сообщения должно возвращать весь файл, поэтому не используйте его с большим набором. Набором записей можно управлять или использовать .GetRows для создания массива значений ( http://www.w3schools.com/ado/met_rs_getrows.asp )
Кажется, осталась проблема преобразовать из массива строк в четыре массива столбцов. Возможно, этот фрагмент поможет
Option Explicit
Option Base 0
Sub import()
Dim sTxt() As String
Dim sLine As Variant
Dim iCountLines As Long
Dim iRowIterator As Long
Dim i As Long
Dim sRow() As String
Dim sColumnA() As String
Dim sColumnB() As String
Dim sColumnC() As String
Dim sColumnD() As String
' read in file '
Open "MyFile.txt" For Input As #1
ReDim sTxt(0)
Do While Not EOF(1)
Input #1, sTxt(UBound(sTxt))
ReDim Preserve sTxt(UBound(sTxt) + 1)
Loop
Close #1
' dim array for each columns '
iCountLines = UBound(sTxt)
Debug.Print "working with ", iCountLines, "lines"
ReDim sColumnA(iCountLines)
ReDim sColumnB(iCountLines)
ReDim sColumnC(iCountLines)
ReDim sColumnD(iCountLines)
' "transpose" sTxt '
iRowIterator = 0
For Each sLine In sTxt
sRow = Split(sLine, " ")
If UBound(sRow) = 3 Then
sColumnA(iRowIterator) = sRow(0)
sColumnB(iRowIterator) = sRow(1)
sColumnC(iRowIterator) = sRow(2)
sColumnD(iRowIterator) = sRow(3)
iRowIterator = iRowIterator + 1
End If
Next sLine
' now work with sColumnX '
Debug.Print "Column A"
For i = 0 To iCountLines
Debug.Print sColumnA(i)
Next i
End Sub