Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/34: Рейтинг темы: голосов - 34, средняя оценка - 4.74
3 / 2 / 1
Регистрация: 28.01.2019
Сообщений: 15
1

Запись данных из массива в файл *.csv

12.03.2019, 12:30. Показов 6140. Ответов 6

Author24 — интернет-сервис помощи студентам
В процессе доработки макроса, вытягивающего из страницы excel номера телефонов столкнулся с проблемой.
Все работает как задумывалось, в конце обработки макрос пишет в файл,
НО(!) в конце файла *.csv (разделители: точка с запятой), ставится перенос строки.
Программа, в которую загружается список телефонов из-за того переноса не может импортировать, выдавая ошибку.
Может кто подсказать как избавиться от этого?

P.S. в ячейке (3,1) содержится строка, в конце которой прописана дата отчета.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Sub Search()
Dim i As Integer
Dim r()
Dim Filename as String
Dim sh As Excel.Worksheet
Set sh = ActiveWorkbook.Worksheets(1)
 
Filename = "\\192.168.2.1\vba\за " & Right(sh.Cells(3, 1).text, 10) & ".csv"
 
Open Filename For Output As #1
    For i = 1 To UBound(r)
        If r(i, 1) <> "" Then
            Print #1, r(i, 1) & ";" & r(i, 2)
            Else
            Exit For
        End If
    Next
Close #1
 
MsgBox ("файл сохранен: " & Filename)
End Sub
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.03.2019, 12:30
Ответы с готовыми решениями:

Запись в CSV-файл из массива. Не является форматом csv!
В общем искал работу... Дали тестовое написать парсер для сайта с выводом информации в csv-файл....

Запись данных в .CSV файл
Здравствуйте, столкнулся с глупой проблемой, но не смог нагуглить решение. Вводные: есть два...

Запись данных в csv файл по приходу в COM порт
Уже поднимал подобный вопрос, перерыл много информации, но так и не нашел ответа. Необходимо...

Создание и запись данных в CSV файл - перевод с C#
Привет) Помогите плиз перевести проект из С# в С++. Я на С# то написал все это с гуглом, а...

6
6945 / 2849 / 549
Регистрация: 19.10.2012
Сообщений: 8,724
12.03.2019, 12:55 2
Вместо Print пишите Write, ну и перенос строки придётся самому ставить когда он нужен.
0
15151 / 6424 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
12.03.2019, 13:36 3
Лучший ответ Сообщение было отмечено Ухин Николай как решение

Решение

Hugo121, Ухин Николай, Write ставит перенос строки, если в конце списка запятая не стоит. Так же как и Print, если в конце точка с запятой не стоит. У Write еще заморочка есть - к строкам кавычки добавляет.
Можно так
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Dim f As Boolean
Open Filename For Output As #1
    For i = 1 To UBound(r)
        If r(i, 1) <> "" Then
            If f Then Print #1, 'не первая строка
            Print #1, r(i, 1) & ";" & r(i, 2);
            f = True
            Else
            Exit For
        End If
    Next
Close #1
1
3 / 2 / 1
Регистрация: 28.01.2019
Сообщений: 15
12.03.2019, 15:01  [ТС] 4
Спасибо!
Всё работает как требовалось.

Вот только не совсем понял по какому принципу это работает.
Со второй строки массива понятно что делает - запись данных из массива и присвоение переменной F значения "истина",
а вот что в первой что происходит?
0
6945 / 2849 / 549
Регистрация: 19.10.2012
Сообщений: 8,724
12.03.2019, 15:27 5
Я обычно для записи в файл использую Microsoft File System Object, там как-то всё понятнее
0
15151 / 6424 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
12.03.2019, 15:32 6
Ухин Николай, Print #1, - это печать пустой строки, т.е. вывод перевода строки. Запись данных из массива печатается без перевода строки (; в конце), и если при следующем проходе цикла опять что-то печатается, то сначала выводится перевод строки (для предыдущей строки). А вся возня с булевой переменной для того, чтобы перед первой строкой не выводилась пустая строка. Если программа, в которую импортируется файл, не собьется при наличии пустой первой строки в файле, можете просто переделать строку в своей программе так
Visual Basic
1
Print #1, vbNewLine & r(i, 1) & ";" & r(i, 2);
1
3 / 2 / 1
Регистрация: 28.01.2019
Сообщений: 15
12.03.2019, 15:36  [ТС] 7
Спасибо, теперь всё понятно. Относительно.
Буду пробовать ваять дальше...
0
12.03.2019, 15:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.03.2019, 15:36
Помогаю со студенческими работами здесь

Экспорт данных из массива в CSV файл
Собственно сабж. Есть массив типа double и int32 их нужно перенести в CSV Не умею работать с CSV...

запись в csv файл
Добрый день,пытаюсь записать в csv файл таблицу mysql ,однако в файл попадает также весь html код...

Запись в csv файл
Считываю Лист объектов, делаю проверку по ключевому слову и нужно записать найденное в новый файл....

Запись в csv файл
Как сделать так чтобы результаты выполнения программы записывались в csv файл?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru