Здравствуйте. Не могли бы помочь с решением задачи. В папке около ста файлов CSV.В каждом файле не более 51 строки. Необходимо со всех файлов CSV собрать строки с инфой в один файл CSV с названием, например, ОБЩИЙ. Получится один файл CSV с, примерно, 5100 строками. Если, конечно, получится)
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
)
Сложный bat/cmd для "без заголовков" предложен, можно проще - например можно выполнить в тоталкомандере на активном нужном каталоге (ну или батник в него положить):
К сожалению, остался вопрос - можно ли как-то прописывать, откуда какая строка, из какого файла.? На этапе, когда файлы .csv еще не обьединены, как добавить напротив каждой строки название файла? Допустим, есть два файла - Окна и Двери. Как прописать в каждой строчке файла - Окна,Окна, Окна..... а в другом файле - Двери, Двери, Двери..... Тогда при обьединении файлов будет видно, откуда каждая строка, из какого файла.
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
Казанский, спасибо. только из интереса проверил все баты в теме. правильный результат только у однострочного бата от Hugo и такой же бат от БМВ из #7. Hugo, спасибо большое. Ваш бат и .txt собирает на ура. Super
делали недавно в PQ - для вставки названий файлов,полагаю, можно покрутить
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
artyrH написал: с сайта так скачались. utf-8 - это проблема?
так при скачивании с сайта (если качаете макросом) и приведите к нормальной кодировке (любой) через ADOStream = CreateObject("ADODB.Stream") -- есть же примеры на форуме и достаточно их p.s. 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, Добрый день. Благодарю Вас за рабочий скрипт, однако при объединении файла он буквы кириллицы заменяет на символы, как-то можно это исправить? Благодарю.
Если речь идет об объединении файлов с целью последующей загрузки в Excel, то проще всего объединить всё, а затем удалить лишние заголовки (можно с помощью автофильтра).