Отформатируйте данные из Textfile в файл CSV

Я пишу скрипт на VB Script для форматирования данных Active Directory. Я использую Bat Script для создания вывода в txt, и я хочу сделать VB Script для форматирования данных с заголовками.

Мой пакетный скрипт

dsquery * -limit 0 -filter (objectclass=computer) -attr Name distinguishedName operatingSystem operatingSystemVersion whenChanged whenCreated > fullq.txt

Сценарий VB, который у меня есть, в настоящее время

Option Explicit

Dim FSO, TextPath, CSVPath
Dim Textline, oText, oCSV
Dim CN, OU, i

Set FSO = CreateObject("Scripting.FileSystemObject")

TextPath = "fullq.txt"
Set oText = FSO.OpenTextFile(TextPath,1)

CSVPath = "fullq.csv"
Set oCSV = FSO.CreateTextFile(CSVPath, 2 ,False)

oCSV.WriteLine("Name,DistinguishedName,OperatingSystem,OperatingSystemVersion,whenChanged,whenCreated")
oCSV.WriteLine

oText.SkipLine
Do Until oText.AtEndOfStream
    Textline = oText.ReadLine()

    OU = Split(TextLine, ",")
    CN = Mid(OU(0), 5)

    oCSV.Write CN & ","
    For i = 1 To UBound(OU)
        oCSV.Write OU(i)
        If i < UBound(OU) Then
            oCSV.Write("/")
        End If
    Next
    oCSV.Writeline
Loop

oCSV.WriteLine
oCSV.Close

Проблема, с которой я сталкиваюсь, заключается в том, что данные OperatingSystem, OperatingSystemVersion, whenCreated и whenChanged находятся в столбце выделенного имени. Я хочу, чтобы это было в их собственной соответствующей колонке. Приведенный выше код в основном предназначен для DistinguishedName. Я добавил новый атрибут: OperatingSystem, OperatingSystemVersion, whenChanged, whenCreated. Для выделенного имени я хотел бы заменить запятую на «/», тогда как остальные атрибуты я хотел бы, чтобы они были записаны в соответствующем столбце. Я не могу использовать PowerShell, так как компания заблокировала его.

Вывод в CSV выглядит так:

Name,DistinguishedName,OperatingSystem,OperatingSystemVersion,whenChanged,WhenCreated

PC1,OU=1/OU=2/OU=3/DC=4/DC=COM    Window    123    12/12/12 10:10:10 12/12/12 10:10:10 , , ,
  • Обратите внимание, что запятая представляет новый столбец

Как написано выше, я попробовал этот сценарий VB, но данные OperatingSystem, OperatingSystemVersion, whenCreated и whenChanged находятся в столбце различаемого имени. Я хочу, чтобы это было в их собственной соответствующей колонке.

Вот как будет выглядеть файл fullq.txt:

Name        DistinguishedName              OperatingSystem        OperatingSystemVersion   whenChanged        WhenCreated
PC1         OU=1/OU=2/OU=3/DC=4/DC=COM     Window                    123 
      12/12/12 10:10:10     12/12/12 10:10:10 

Это странно. PowerShell предназначен для такого типа работы. Почему PowerShell заблокирован, а VBScript разрешен? Это противоположно тому, что можно было бы ожидать. Это действительно заблокировано или вам просто нужно установить политику выполнения?

LesFerch 13.04.2023 10:44

Компания блокирует запуск PowerShell, поскольку он считается привилегированным пользователем. следовательно, я не могу использовать PowerShell

Josh123 13.04.2023 10:48

Пожалуйста, опубликуйте хотя бы одну примерную строку из файла fullq.txt (у меня нет среды AD, настроенной для получения вывода самостоятельно).

LesFerch 13.04.2023 14:20

Привет, я попытался поместить вывод fullq.txt в меру своих возможностей в сообщении, но в основном это заголовки и значения, заголовки и значения разделены пробелом.

Josh123 13.04.2023 14:32

То, что вы разместили для fullq.txt, не имеет смысла. Ваш сценарий разбивается на запятые, но в этом образце входного файла запятых нет. Пожалуйста, перепроверьте. Я также не вижу, как вы получаете три замыкающие запятые в своем выводе.

LesFerch 13.04.2023 14:36

Сценарий был в основном для выделенного имени, так как в нем была кратная запятая, теперь я хочу добавить больше атрибутов. Я изучаю это в Интернете, но безрезультатно, так как большинство из них написано с использованием PowerShell.

Josh123 13.04.2023 14:40

Нет нужды в объяснениях. Пожалуйста, отредактируйте свой вопрос, чтобы я мог воспроизвести ваш вывод. Либо ввод должен содержать запятые, либо сценарий не должен разделяться на запятые.

LesFerch 13.04.2023 14:48

Вы должны отредактировать образец fullq.txt или отредактировать сценарий. В нынешнем виде я не могу воспроизвести ваш вывод, используя опубликованный сценарий и опубликованный ввод. И не только редактировать. Тестируйте то, что вы публикуете!

LesFerch 13.04.2023 15:06

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

LesFerch 13.04.2023 16:03

Отвечает ли это на ваш вопрос? Конвертировать txt файл в excel в vbscript

user692942 18.04.2023 15:04
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
10
150
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Учитывая предоставленный образец fullq.txt, ввод можно разделить на " " (два пробела), а затем игнорировать пустые записи и обрезать результаты:

Const Excel = True

Set oFSO = CreateObject("Scripting.FileSystemObject")

TextPath = "fullq.txt"
Set oText = oFSO.OpenTextFile(TextPath,1)

CSVPath = "fullq.csv"
Set oCSV = oFSO.CreateTextFile(CSVPath,2,True)

If Excel Then oCSV.WriteLine "SEP=,"
oCSV.WriteLine "Name,DistinguishedName,OperatingSystem,OperatingSystemVersion,whenChanged,whenCreated"

oText.SkipLine

Do Until oText.AtEndOfStream
    NewLine = ""
    Textline = oText.ReadLine
    aTextLine = Split(Textline,"  ")
    For i = 0 To UBound(aTextLine)
      If aTextLine(i)<>"" Then
        If NewLine<>"" Then NewLine = NewLine & ","
        NewLine = NewLine & Trim(aTextLine(i))
      End If
    Next
    oCSV.Writeline NewLine
Loop

oText.Close
oCSV.Close

Обратите внимание, что в примере входных данных не было запятых, поэтому я удалил код, который разбивается на запятые.

Привет, извините, недавно был чем-то занят, я попробовал ваш код, но он не работает, так как он продолжает работать, поэтому мне нужно завершить задачу, чтобы она перестала работать. Недавно я попытался разбить коды на множество частей и обнаружил проблему. Сначала я попытаюсь решить это, если я не могу, я изменю вопрос. Спасибо за искреннюю помощь! извините что вдруг удалил

Josh123 15.04.2023 13:08

Судя по входному образцу, похоже, что единственная проблема со сценарием, который я изначально опубликовал, заключается в том, что я забыл сбросить новую строку на каждой итерации. Теперь эта строка добавлена. Пожалуйста, повторите тестирование. Если вывод по-прежнему неверен, опубликуйте больший образец ввода.

LesFerch 15.04.2023 18:02

Получил, через два дня проверю, спасибо большое

Josh123 15.04.2023 19:21

Привет, я проверил ваш ответ, и мне нравится, как он есть, но я хотел бы спросить, можно ли записывать данные в свой собственный столбец? если да, то как? потому что на данный момент выходные данные, все данные находятся в столбце A, например, «имя, различающееся имя, операционная система, версия операционной системы, когда изменено, когда создано». Возможно ли, чтобы каждые данные находились в своем столбце?

Josh123 17.04.2023 05:04

Вы говорите об импорте этого CSV-файла в электронную таблицу, например Excel? Если это так, это просто вопрос того, как вы загружаете файл. Если у вас установлен Excel и дважды щелкните CSV, он загрузится в один столбец, но если вы используете «Открыть файл», вы получите параметры, позволяющие разделить его на запятые, а затем он будет загружаться в отдельные столбцы.

LesFerch 17.04.2023 05:24

Если вы используете Excel, то он будет автоматически разделен запятыми, если первая строка CSV-файла будет SEP=,. Я изменил сценарий, чтобы сделать это возможным.

LesFerch 17.04.2023 05:31

Другие вопросы по теме