• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Чтение из Txt файла

  • Автор темы Hryv
  • Дата начала
Статус
Закрыто для дальнейших ответов.
H

Hryv

Помогите, плиз, кому не трудно
Я, в принципе программировать умею, но с VB практически не сталкивался
А тут понадобился макрос для EXCEL
Вот упрощенная формулировака задачи (имея пример, я сам доделаю)

1. Надо открыть файл по фиксированному пути (например C:\путь\файл.txt)
2. Этот текстовый файл содержит 2 строки, в каждой строке число в формате nn...n.nn
3. Эти числа надо записать в открытый в EXCEL файл в заранее известные ячейки
Например: Лист1!A1 и Лист2!B2
4. Закрыть файл

Спасибо
 
G

Gamlet

- открытие файлов, в вба так же. Как залить в эксель ячейку, не знаю.
чтоб числа были- при чтении открывай переменной типа стринг, потом сравняй лонг переменную с ней.
Вроде заливать в ячейки так: Лист1.a1="тект", может что то путаю.
 
T

Tanya

Код:
' Первый параметр - имя файла
' Следующие - (неважно сколько, от 1) адреса ячеек
Sub nn(fName As String, ParamArray arrCells())
Dim s As String
Dim arrLines() As String
Dim iEnd As Integer
Dim i As Integer

'arrCells - адреса ячеек, куда будем вставлять
'определяем верхнюю границу массива переданных адресов
iEnd = UBound(arrCells)

' если нет адресов - так что тут делать ))) молча уходим
If iEnd = -1 Then Exit Sub

If Len(Dir$(fName)) > 0 Then
' заполняем буфер пробелами по размеру файла
s = Space(FileLen(fName))

' открываем и читаем файл
Open "e:\1.txt" For Binary As #1
Get #1, , s

Close #1

If Len(s) Then
' если в файле что-то было разбиваем его на массив строк
arrLines = Split(s, vbCrLf)

' определяем соответствие количества строк и количества переданных адресов
If iEnd > UBound(arrLines) Then iEnd = UBound(arrLines)
For i = 0 To iEnd
' и по адресам записываем значения
' без проверок число или нет записано - что есть то и пишем
Range(arrCells(i)).Value = arrLines(i)
Next i
Else
MsgBox "Нет данных!"
End If
Else
MsgBox "Нет данных!"
End If

End Sub

Sub kk()
' проверочный макрос
'Call nn("e:\1.txt", "Лист1!A1", "Лист2!B2")
Call nn("e:\1.txt")
End Sub

Проверочный макрос лучше все же так делать:
Код:
Sub kk()
' проверочный макрос
Call nn("e:\1.txt", "Лист1!A1", "Лист2!B2")
End Sub
 
G

Gamlet

Еще раз убеждаюсь, что мое место должна занять Tanya.
 
H

Hryv

Tanya, спасибо
Все работает

Была небольшая неточность, открывался файл не из параметра а из строки Open "e:\1.txt" For Binary As #1
но я еще до запуска заметил и подправил

Отдельное спасибо, за то что очень универсально сделано
Мне осталось сделать только нужное количество вызовов nn() с нужными параметрами и моя задача полностью решена :)
 
T

Tanya

Код:
Была небольшая неточность, открывался файл не из параметра а из строки Open "e:\1.txt" For Binary As #1
но я еще до запуска заметил и подправил

О! Да! Вот так всегда, стараешься, стараешься и где-нибудь закрадется неточность ...
Вроде мелочь, а осадок остается )))
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!