gpt4 book ai didi

arrays - 为数组的每个注释属性添加周围的双引号(我认为)

转载 作者:行者123 更新时间:2023-12-03 19:30:06 25 4
gpt4 key购买 nike

我真的没有运气,所以请原谅我缺乏失败的代码示例来展示。

我有一个数组,我将其传递给使用 SQLite 模块作为 psdrive 安装的 SQLite 数据库。目标表 (db:\events) 是使用以下命令和定义创建的:

mount-sqlite -name dbRAM -dataSource :memory:
Invoke-Item dbRAM: -sql 'CREATE TABLE event (timestamp DATETIME PRIMARY KEY NOT NULL,event NOT NULL,data3 TEXT,data4 TEXT,data5 TEXT,data6 TEXT,data7 TEXT,data8 TEXT,data9 TEXT);'

这创建了以下子项:
PS dbRAM:\> gci


SSItemMode : d+~< i
PSPath : CodeOwls.PowerShell.SQLite.Provider\SQLite::[Data Source=:memory:]\event
PSParentPath : CodeOwls.PowerShell.SQLite.Provider\SQLite::[Data Source=:memory:]
PSChildName : event
PSDrive : dbRAM
PSProvider : CodeOwls.PowerShell.SQLite.Provider\SQLite
PSIsContainer : True
TABLE_CATALOG : main
TABLE_SCHEMA :
TABLE_NAME : event
TABLE_TYPE : table
TABLE_ID : 1
TABLE_ROOTPAGE : 2
TABLE_DEFINITION : CREATE TABLE event (timestamp DATETIME PRIMARY KEY NOT NULL,event NOT NULL,data3 TEXT,data4 TEXT,data5 TEXT,data6 TEXT,data7 TEXT,data8 TEXT,data9 TEXT)
RowError :
RowState : Unchanged
Table : {event}
ItemArray : {main, , event, table...}
HasErrors : False

我有一个通过 Convertfrom-Json 创建的数组,它来自本世纪有史以来最好的游戏《精英:危险》。然而问题是我实际上可以预测的名称只有几个 sql 列。这些是时间戳和事件属性名称。这是我的数组的一个示例:
PS dbRAM:\> $EliteEvent |gm


TypeName: System.Management.Automation.PSCustomObject

Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
event NoteProperty string event=Docked
StarSystem NoteProperty string StarSystem=Laksak
StationEconomy NoteProperty string StationEconomy=$economy_Colony;
StationEconomy_Localised NoteProperty string StationEconomy_Localised=Colony
StationFaction NoteProperty string StationFaction=Lei Cheung
StationGovernment NoteProperty string StationGovernment=$government_Engineer;
StationGovernment_Localised NoteProperty string StationGovernment_Localised=Workshop
StationName NoteProperty string StationName=Trader's Rest
timestamp NoteProperty string timestamp=2017-02-26 04:07:54

我可以看到 2 个问题,以下错误消息将支持这一点。第一个是值周围没有引号,因此我需要找到一种在数组中的每个值周围添加引号的方法,如 https://psqlite.codeplex.com/wikipage?title=Creating%20Records&referringTitle=Documentation 中所述

如果我尝试将此数组复制到 sql 我收到以下错误:
PS dbRAM:\> new-item -path dbRAM:\event $EliteEvent
New-Item : A positional parameter cannot be found that accepts argument '@{timestamp=2017-02-26 04:07:54; event=Docked; StationName=Trader's Rest; StarSystem=Laksak; StationFaction=Lei Cheung;
StationGovernment=$government_Engineer;; StationGovernment_Localised=Workshop; StationEconomy=$economy_Colony;; StationEconomy_Localised=Colony}'.
At line:1 char:1
+ new-item -path dbRAM:\event $EliteEvent
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [New-Item], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.NewItemCommand

第二个重大问题是我只想将属性值放入我的属性 data3 到 data9 中,但我永远不知道数组中不同属性的名称是什么。每种事件类型都会产生自己的数据集,这些类型之间唯一的共同点是时间戳和事件类型。我到底如何通过 new-item cmdlet 中使用的数组将名称未知属性按顺序填充到我的 SQL 中?

如果您想知道丢失属性名称的意义何在,我将从数据库中提取数据并通过检测事件类型的代码处理其他属性,然后根据与该类型关联的固定格式处理数据。

真的很想解决这个问题,我希望有人能提供帮助。

这真的太多了,无法实现吗?

最亲切的问候 !

**编辑*****

我考虑过为每种类型的事件创建不同的表定义并分别处理它们意味着什么,因此我创建了一个表以完全适合数组属性名称:
PS dbRAM:\> Invoke-Item dbRAM: -sql 'CREATE TABLE event_docked (timestamp DATETIME PRIMARY KEY NOT NULL,event TEXT NOT NULL,StarSystem TEXT,StationEconomy TEXT,StationEconomy_Localised TEXT,StationFaction TEXT, StationGovernment TEXT,StationGovernment_Localised TEXT,StationName TEXT);'

同样的问题一直存在:
PS dbRAM:\> new-item -path dbRAM:\event_docked $EliteEvent
New-Item : A positional parameter cannot be found that accepts argument '@{timestamp=2017-02-26 04:07:54; event=Docked; StationName=Trader's Rest; StarSystem=Laksak; StationFaction=Lei Cheung; StationGovernment=$government_Engineer;; StationGovernment_Localised=Workshop; StationEconomy=$economy_Colony;; StationEconomy_Localised=Colony}'.
At line:1 char:1
+ new-item -path dbRAM:\event_docked $EliteEvent
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [New-Item], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.NewItemCommand

****编辑**有关 Mathias R. Jessen 以下建议的额外信息
PS dbRAM:\> $EliteEvent | New-Item -Path dbRAM:\event_docked
New-Item : Sequence contains no elements
At line:1 char:15
+ $EliteEvent | New-Item -Path dbRAM:\event_docked
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: ([Data Source=:memory:]\event_docked:String) [New-Item], InvalidOperationException
+ FullyQualifiedErrorId : NewItem.Invoke,Microsoft.PowerShell.Commands.NewItemCommand


PS dbRAM:\> $EliteEvent


timestamp : 2017-02-26 04:07:54
event : Docked
StationName : Trader's Rest
StarSystem : Laksak
StationFaction : Lei Cheung
StationGovernment : $government_Engineer;
StationGovernment_Localised : Workshop
StationEconomy : $economy_Colony;
StationEconomy_Localised : Colony

****编辑**响应以下下一个建议的额外信息:
$JournalPath = "\\AORUS_X7\EliteDangerousLogs"
import-module sqlite
New-PSDrive -Name Journal -PSProvider FileSystem -Root $JournalPath
function Get-EliteEvent
{
$Event = convertfrom-json (Get-ChildItem -Path $JournalPath -Recurse | Sort-Object -Property LastWriteTime | Select-Object -last 1 | select-object $_.fullname | get-content | select-object -last 1)
$Event.timestamp = $Event.timestamp.Replace('T', ' ')
$Event.timestamp = $Event.timestamp.TrimEnd('Z')
return $Event
}

mount-sqlite -name dbRAM -dataSource :memory:
Invoke-Item dbRAM: -sql 'CREATE TABLE event_docked (timestamp DATETIME PRIMARY KEY NOT NULL,event TEXT NOT NULL,StarSystem TEXT,StationEconomy TEXT,StationEconomy_Localised TEXT,StationFaction TEXT, StationGovernment TEXT,StationGovernment_Localised TEXT,StationName TEXT);'

$EliteEvent = Get-EliteEvent

上面是脚本 - 然后我在提示符下运行以下命令:
PS dbRAM:\> $EliteEvent | New-Item -Path dbRAM:\event_docked
New-Item : Sequence contains no elements
At line:1 char:15
+ $EliteEvent | New-Item -Path dbRAM:\event_docked
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: ([Data Source=:memory:]\event_docked:String) [New-Item], InvalidOperationException
+ FullyQualifiedErrorId : NewItem.Invoke,Microsoft.PowerShell.Commands.NewItemCommand


PS dbRAM:\> $EliteEvent


timestamp : 2017-02-26 04:07:54
event : Docked
StationName : Trader's Rest
StarSystem : Laksak
StationFaction : Lei Cheung
StationGovernment : $government_Engineer;
StationGovernment_Localised : Workshop
StationEconomy : $economy_Colony;
StationEconomy_Localised : Colony

有一个完整的 json 文件目录,上面的函数从最后一个文件中取出最后一行。这是命令行上函数的命令输出(没有 convertfrom-json)
PS C:\Users\Stuart\Desktop\Amy-EVA2_git (master ≡)
$ Get-ChildItem -Path $JournalPath -Recurse | Sort-Object -Property LastWriteTime | Select-Object -last 1 | select-object $_.fullname | get-content | select-object -last 1
{ "timestamp":"2017-02-26T04:07:54Z", "event":"Docked", "StationName":"Trader's Rest", "StarSystem":"Laksak", "StationFaction":"Lei Cheung", "StationGovernment":"$government_Engineer; ", "StationGovernment_Localised":"Workshop", "StationEconomy":"$economy_Colony;", "StationEconomy_Localised":"Colony" }

然而......不知何故,我刚刚检查了你的新项目数组管道的命令结构这次已经工作了,尽管错误说序列不包含任何元素。我不明白(虽然会接受它并关闭错误)检查一下:
PS dbRAM:\> cd event_docked

PS dbRAM:\event_docked> dir


SSItemMode : ~<>
PSPath : CodeOwls.PowerShell.SQLite.Provider\SQLite::[Data Source=:memory:]\event_docked\26-02-2017 04:07:54
PSParentPath : CodeOwls.PowerShell.SQLite.Provider\SQLite::[Data Source=:memory:]\event_docked
PSChildName : 26-02-2017 04:07:54
PSDrive : dbRAM
PSProvider : CodeOwls.PowerShell.SQLite.Provider\SQLite
PSIsContainer : False
timestamp : 26/02/2017 04:07:54
event : Docked
StarSystem : Laksak
StationEconomy : $economy_Colony;
StationEconomy_Localised : Colony
StationFaction : Lei Cheung
StationGovernment : $government_Engineer;
StationGovernment_Localised : Workshop
StationName : Trader's Rest
RowError :
RowState : Unchanged
Table : {26-02-2017 04:07:54}
ItemArray : {26/02/2017 04:07:54, Docked, Laksak, $economy_Colony;...}
HasErrors : False

它的工作,我不知道如何,知道发生了什么还是我接受它并抑制错误?非常感谢您到目前为止的帮助。

最佳答案

在“这种”情况下,答案是当您想使用 SQLite powershell 模块在 SQLite 数据库中创建新记录时,它通过在 new-item cmdlet 中对数组进行管道传输来工作。

在“这种”情况下,它确实产生了一个错误,但这并不重要,因为数据已正确插入到 SQLite 记录中,所以我只是将错误输出重定向到 null。

关于arrays - 为数组的每个注释属性添加周围的双引号(我认为),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42475930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com