Страницы: 1
RSS
Собрать информацию из нескольких файлов CSV в один., макрос
 
Здравствуйте. Не могли бы помочь с решением задачи. В папке около ста файлов CSV.В каждом файле не более 51 строки. Необходимо со всех файлов CSV собрать строки с инфой в один файл CSV  с названием, например, ОБЩИЙ. Получится один файл CSV с, примерно, 5100 строками. Если, конечно, получится)
Изменено: artyrH - 20.10.2018 19:21:55
 
Ленивым.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
собрал программкой File Joiner.
JayBhagavan,  уже собрал.
 
OFF
Если фйлы без заголовков то справится обычный bat (cmd) файл

Код
echo off 
rem // переходим в папку .если нужно то можно указывать путь или сейчас в текущем собирает
rem cd /D %_mainpath%  

del Common.csv
rem // создаем пустой файл
<nul set /p x=>Common.csv

rem // цикл по всем файлам  c раширение .csv в папке и стыкуем их в Common.csv
for  %%f in (*.csv) do (
   rem // выводим имя очередного файла 
   copy Common.csv + %%f Common.csv
)
Изменено: БМВ - 20.10.2018 20:13:29
По вопросам из тем форума, личку не читаю.
 
БМВ, спасибо.
 
Сложный bat/cmd для "без заголовков" предложен, можно проще - например можно выполнить в тоталкомандере на активном нужном каталоге (ну или батник в него положить):
Код
copy /b *.csv ОБЩИЙ.csv
 
Hugo,  да, че то перебдел с одной стороны и забыл что сливает  без + с другой. только /Y добавить надо.
copy /b *.csv ОБЩИЙ.csv /y
По вопросам из тем форума, личку не читаю.
 
К сожалению, остался вопрос - можно ли как-то прописывать, откуда какая строка, из какого файла.? На этапе, когда файлы .csv еще не обьединены, как добавить напротив каждой строки название файла? Допустим, есть два файла - Окна и Двери. Как прописать в каждой строчке файла - Окна,Окна, Окна..... а в другом файле - Двери, Двери, Двери..... Тогда при обьединении файлов будет видно, откуда каждая строка, из какого файла.
 
tayers, по ссылке смотрели? или лень? в pq пробовали?
 
artyrH, чуть изменить бат БМВ
Код
echo off 
rem // переходим в папку .если нужно то можно указывать путь или сейчас в текущем собирает
rem cd /D %_mainpath%  
 
del Common.csv
 
rem // цикл по всем файлам  c раширение .csv в папке и стыкуем их в Common.tmp
for  %%f in (*.csv) do (
   rem // строки из очередного файла с добавлением имени через ;
   for /f %%s in (%%f) do echo %%~nf;%%s >> Common.tmp
)
rem // переименовываем выходной файл
ren Common.tmp common.csv
Изменено: Казанский - 17.02.2019 23:55:22
 
Казанский, спасибо. только из интереса проверил все баты в теме. правильный результат только у однострочного бата от Hugo и такой же бат от БМВ  из #7.
Hugo, спасибо большое. Ваш бат и .txt собирает на ура. Super
Изменено: artyrH - 18.02.2019 07:19:03
 
делали недавно в PQ - для вставки названий файлов,полагаю, можно покрутить
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
artyrH написал:
правильный результат только у однострочного бата от  Hugo
Кто ж знал, что ваши csv в кодировке UTF-8  :sceptic:
 
Казанский, на кодировку никогда и не обращал внимание. с сайта так скачались. utf-8 - это проблема?
 
Цитата
artyrH написал:
с сайта так скачались. utf-8 - это проблема?
так при скачивании с сайта (если качаете макросом) и приведите к нормальной кодировке (любой) через ADOStream  = CreateObject("ADODB.Stream") -- есть же примеры на форуме и достаточно их
p.s.
utf-8 в большинстве своём на сайтах
Изменено: JeyCi - 20.02.2019 09:32:30
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
JeyCi написал:
если качаете макросом
да нет, качал вручную). открывал все 50 страниц и скачивал. точно не помню.
вернее, сто страниц открывал.
Изменено: artyrH - 20.02.2019 10:01:30
 
Цитата
artyrH написал:
utf-8 - это проблема?
Однако да! Погуглите cmd utf-8 - увидите. Вот vbs, который соединяет файлы, дописывает имя файла, удаляет заголовки (кроме первого). Сохраните в папку с файлами и запускайте.
Код
Option Explicit

Const OUTFILE = "Общий.csv"
Dim objStreamIn, objStreamOut, strData, blnSecond, lngI, objFile, strBaseName, strFldr
  Set objStreamIn = CreateObject("ADODB.Stream")
  objStreamIn.Charset = "utf-8"
  Set objStreamOut = CreateObject("ADODB.Stream")
  objStreamOut.Charset = "utf-8"
  objStreamOut.Open
  With CreateObject("scripting.filesystemobject")
    strFldr = .getfile(wscript.scriptfullname).parentfolder.Path & "\"
    For Each objFile In .getfolder(strFldr).Files
      If StrComp(OUTFILE, objFile.Name) <> 0 And StrComp(".csv", Right(objFile.Name, 4)) = 0 Then
        objStreamIn.Open
        objStreamIn.LoadFromFile objFile.Path
        strData = objStreamIn.ReadText
        objStreamIn.Close
        strBaseName = Left(objFile.Name, Len(objFile.Name) - 4)
        For lngI = Len(strData) To 1 Step -1
          If Asc(Mid(strData, lngI, 1)) > 13 Then strData = Left(strData, lngI): Exit For
        Next
        If blnSecond Then
          strData = Mid(strData, InStr(strData, vbLf))
          objStreamOut.WriteText Replace(strData, vbLf, vbLf & """" & strBaseName & """,")
        Else
          objStreamOut.WriteText """Файл""," & Replace(strData, vbLf, vbLf & """" & strBaseName & """,")
          blnSecond = True
        End If
      End If
    Next
  End With
  objStreamOut.WriteText vbLf
  objStreamOut.SaveToFile strFldr & OUTFILE, 2
 
Казанский, спасибо большое. только я еще не опробовал.
опробовал. работает как часики. Спасибо огромное.
Изменено: artyrH - 20.02.2019 20:35:47
 
artyrH, Добрый день. Благодарю Вас за рабочий скрипт, однако при объединении файла он буквы кириллицы заменяет на символы, как-то можно это исправить? Благодарю.
 
Какая кодировка у этих файлов? Если есть сложности с определением, то выложите фрагмент файла с буквами кириллицы.
Владимир
 
sokol92, Добрый день. UTF-8
 
Приложенный файл имеет кодировку windows-1251.
Владимир
 
Не знал как определять, видимо неправильно понял инструкцию по определению кодировки, на всякий поэтому приложил файл :)
 
Тогда для Вас подходит, например,  метод из сообщения #7. Скрипт из #17 - только для файлов в кодировке UTF-8.
Владимир
 
Да, работает, благодарю!
А можно ли сделать чтобы без заголовков копировал?  
 
Если речь идет об объединении файлов с целью последующей загрузки в Excel, то проще всего объединить всё, а затем удалить лишние заголовки (можно с помощью автофильтра).
Владимир
 
sokol92,Да, все работает, благодарю!  
 
Успехов!
Владимир
Страницы: 1
Наверх