Строка
Set listFile = fso.OpenTextFile(aniLines).ReadAll
не будет работать по двум причинам:
Set
может использоваться только при назначении объектов для переменных, но ReadAll
возвращает строку . OpenTextFile()
ожидает строку, но aniLines
представляет собой массив строк. Чтобы обработать все элементы массива, вы можете использовать что-то вроде этого:
For Each line In aniLines
' read dirlist.txt file
Next
Вопрос в том, как вы хотите читать файлы dirlist.txt
. Вы можете сделать то же, что и с другими файлами: прочитайте весь контент файла и разделите его на массив:
listFile = fso.OpenTextFile(line).ReadAll
listLines = Split(listFile, vbCrLf)
, а затем используйте другой цикл, подобный приведенному выше, для обработки полей массива listLines
. Этот подход предпочтительнее для небольших файлов, потому что код проще.
Или вы можете использовать подход ReadLine
(который предпочтительнее, когда вам приходится обрабатывать большие файлы, поскольку он позволяет избежать исчерпания памяти):
Set listFile = fso.OpenTextFile(line) ' <-- remove .ReadAll from this line!
Do Until listFile.AtEndOfStream
fName = listFile.ReadLine
' do stuff with fName
Loop
Я рекомендую использовать Do Until
вместо Do While Not
, потому что семантика такая же, но первая ближе к естественному языку и поэтому ее легче читать.
Также достаточно было бы создать экземпляр объекта FileSystemObject
один раз в начале скрипта и просто использовать этот экземпляр в остальной части скрипта. Бессмысленно повторять его снова и снова.
Как упомянуто @stovfl, вы не можете явно указать объекту cursor
, как форматировать вывод его запроса. Затем вы конвертируете вывод запроса, возвращаемый курсором, в желаемую форму.
Как уже говорилось, ваш вывод следующий: [('type1', 'effort1'), ('type2', 'effort2')]
. Чтобы преобразовать это в словарь:
output = cursor.fetchall() #output from query
output_dict = {}
for index in range(len(output)): #use an index to create new dictionary elements
data = output[index] #use that index to find the next piece of data to insert into output dictionary
output_dict[index] = {'type': data[0], 'effort': data[1]} #create new dictionary element, using
#the index as the key and setup a nested dictionary as the value associated with the key
Выходы:
0 {'type': 'type1', 'effort': 'effort1'}
1 {'type': 'type2', 'effort': 'effort2'}