Необходимо добавить столбец в CSV, который добавляет число для каждой строки данных (1,2,3 и т. Д.) - PullRequest
0 голосов
/ 30 мая 2019

Необходимо добавить CSV-файл, чтобы добавить столбец (Pkey) с приращением числа, начинающимся с 1, для каждой строки данных.Я предпочитаю, чтобы сценарий VB делал это, но если есть более простой метод, который я могу запустить в планировщике задач Windows, я открыт для всего.

Мне просто нужен сценарий, который создает столбец в CSV с именем "Pkey "и добавляет увеличивающееся число +1 к каждой строке данных, начиная с 1. Это должен быть уникальный счетчик вплоть до последней строки данных.

Ожидается добавление столбца с заголовком Pkey, затем нумерация строк данных 1,2,3,4,5 и т. Д., Пока все строки данных не будут пронумерованы уникальным целым числом

Код, который я в настоящее время использую, чтобы перетащить запрос в CSV и сохранить его, каждый раз, когда я пытаюсь сделать приращение, он ломает скрипт:

    Option Explicit

Dim TextExportPath  
Dim TextExportFile  
Dim db              
Dim cn              
Dim strCon          
Dim objFileSys     

db = "X:\VPP DATABASE\Pham.mdb"
TextExportPath = "X:\Scripts\FTP\QuickBase Sync\CustomerData\"
TextExportFile = NewFileName(TextExportPath)

Set objFileSys = CreateObject("Scripting.FileSystemObject")
If objFileSys.FileExists("X:\Scripts\FTP\QuickBase Sync\CustomerData\MMD_Abacus.csv") Then
objFileSys.DeleteFile "X:\Scripts\FTP\QuickBase Sync\CustomerData\MMD_Abacus.csv"

End If


Set cn = CreateObject("ADODB.Connection")

cn.Open _
    "Provider = Microsoft.Jet.OLEDB.4.0; " & _
    "Data Source =" & db

cn.Execute "SELECT * INTO [text;HDR=Yes;Database=" & TextExportPath & _
   "]." & TextExportFile & " FROM 83AFFNIGHT"


Function NewFileName(TextExportPath)
Dim fs
Dim NewFileTemp
Dim a, i

Set fs = CreateObject("Scripting.FileSystemObject")


NewFileTemp = "MMD_Abacus" & ".csv"

a = fs.FileExists(TextExportPath & NewFileTemp)

NewFileName = NewFileTemp
End Function

Поэтому я бы добавил что-то подобное или даже создал быотдельный скрипт vb для запуска после этого?

Dim lines As New List(Of String)
Dim lineNumber = 1

Using parser As New TextFieldParser("TextFile1.txt") With {.Delimiters = {","}}
    Do Until parser.EndOfData
        Dim fields = parser.ReadFields()

        'Add quotes around the column that may be multiline.
        fields(1) = $"""{fields(1)}"""

        lines.Add(String.Join(",", fields) & "," & lineNumber)
        lineNumber += 1
    Loop
End Using

File.WriteAllLines("TextFile1.txt", lines)

Ответы [ 2 ]

0 голосов
/ 30 мая 2019

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

Давайте сделаем PowerShell!

Убедитесь, что выВы используете 32-битный PowerShell для этого:

function Get-MSAccessTable {
Param(
    [parameter(Mandatory=$true)] $filePath,
    [parameter(Mandatory=$true)] $tableName
)    
    $conn = New-Object System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=$filePath;Persist Security Info=False")
    $cmd=$conn.CreateCommand()
    $cmd.CommandText="Select * from $tableName"
    $conn.open()
    $rdr = $cmd.ExecuteReader()
    $dt = New-Object System.Data.Datatable
    $dt.Load($rdr)
    $conn.close()
    $dt
}   

$TextExportPath = "X:\Scripts\FTP\QuickBase Sync\CustomerData"
$TextExportFile = "$TextExportPath\MMD_Abacus.csv"

$db = "X:\VPP DATABASE\Pham.mdb"
$data = Get-MSAccessTable -filePath $db -tableName "83AFFNIGHT"

$Global:seq = 1;
$data = $data | Select-Object <LIST COLUMNS HERE>, @{label = “PKey”; Expression = {$Global:seq;$Global:seq++ }}

Remove-Item -Path "X:\Scripts\FTP\QuickBase Sync\CustomerData\MMD_Abacus.csv"  
$data | Export-Csv -Path $TextExportFile -NoTypeInformation
0 голосов
/ 30 мая 2019

Использование StdIn и StdOut означает, что нам не нужно писать код для обработки файлов.

Это начинается с 1

    Count = 1
    Set Inp = WScript.Stdin
    Set Outp = Wscript.Stdout
    Do Until Inp.AtEndOfStream
        Line=Inp.readline
        outp.writeline Count & vbtab & Line
        Count = Count + 1
    Loop

Для использования

cscript //nologo MyScript.vbs < InputFile > Outputfile
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...