SQLite и tkintetable

Строка

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 один раз в начале скрипта и просто использовать этот экземпляр в остальной части скрипта. Бессмысленно повторять его снова и снова.

0
задан p_punkt 2 March 2019 в 20:01
поделиться

1 ответ

Как упомянуто @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'}
0
ответ дан Ernxst 2 March 2019 в 20:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: