我有一个逗号分隔的数据源,并且引用限定.一张CSV.但是,数据源提供程序有时会做一些不稳定的事情.我已经补偿了除了其中一个之外的所有人(我们逐行阅读文件,然后在清理后将其写回来),我正在寻找解决最后剩下的问题,当我的正则表达式相当弱.
在另一个带引号的字符串中匹配一个带引号的字符串
所以这是我们的示例字符串......
"foobar", 356, "Lieu-dit "chez Métral", Chilly, FR", "-1,000.09", 467, "barfoo", 1,345,456,235,231, "935.18"
Run Code Online (Sandbox Code Playgroud)
我希望匹配子串"chezMétral",以便用子串chezMétral替换它.理想情况下,尽可能少的代码行.最后的目标是将行写回(或将其作为方法返回值返回),替换已经完成.
所以我们的示例字符串最终会......
"foobar", 356, "Lieu-dit chez Métral, Chilly, FR", "-1,000.09", 467, "barfoo", 1,345,456,235,231, "935.18"
Run Code Online (Sandbox Code Playgroud)
我知道我可以定义一个模式,比如(?<quotedstring>\"\w+[^,]+\")匹配引用的字符串,但我的正则表达式很弱(数据库开发人员,几乎从不使用C#),所以我不确定如何匹配命名组quotedstring中的另一个引用字符串.
仅供参考:对于那些注意到用逗号格式但没有引用限定格式的大整数的人来说,已经处理过了.随机使用行分隔符(有时是CR,有时是LF).其他问题......
假设您有一个具有类型 2 缓慢变化维度的表。
我们将该表表示如下,其中包含以下列:
* [Key]
* [Value1]
* ...
* [ValueN]
* [StartDate]
* [ExpiryDate]
Run Code Online (Sandbox Code Playgroud)
在此示例中,我们假设 [StartDate] 实际上是系统已知给定 [Key] 的值的日期。因此我们的主键将由 [StartDate] 和 [Key] 组成。
当给定 [Key] 的一组新值到达时,我们将 [ExpiryDate] 分配给一些预定义的高代理值,例如“12/31/9999”。然后,我们将该 [Key] 的现有“最新”记录设置为具有等于新值的 [StartDate] 的 [ExpiryDate]。基于连接的简单更新。
因此,如果我们总是想获取给定 [Key] 的最新记录,我们知道我们可以创建一个聚集索引:
* [ExpiryDate] ASC
* [Key] ASC
Run Code Online (Sandbox Code Playgroud)
尽管键空间可能非常宽(例如,一百万个键),但我们可以通过最初按 [ExpiryDate] 对它们进行排序来最小化读取之间的页数。由于我们知道给定键的最新记录的 [ExpiryDate] 始终为“12/31/9999”,因此我们可以利用它来发挥我们的优势。
但是...如果我们想获取给定时间所有 [Key] 的时间点快照怎么办?理论上,整个密钥空间不会同时更新。因此,对于给定的时间点,[StartDate] 和 [ExpiryDate] 之间的窗口是可变的,因此按 [StartDate] 或 [ExpiryDate] 排序永远不会产生您要查找的所有记录都在其中的结果。连续的。当然,您可以立即丢弃 [StartDate] 大于您定义的时间点的所有记录。
本质上,在典型的 RDBMS 中,哪种索引策略提供了最佳方式来最大限度地减少读取给定时间点的所有键的值的次数?我意识到我至少可以通过按 [Key] 对表进行分区来最大化 IO,但这肯定不理想。
或者,是否有一种不同类型的缓慢变化的维度可以以更高效的方式解决这个问题?
好的...我有一个相对简单的SSIS包(DTSDesigner100,Visual Studio 2008版本9.0.30729.4462 QFE,.NET Framework 3.5 SP1)。包的SSIS控制流最后是一个文件系统任务,它是一个重命名文件操作。
此文件系统任务的属性如下:
没有定义的表达式。如您所见,我将Destination分配为变量User :: OutputFileName。因此,让我们看一下该变量...
。
"\\\\SERVER\\Folder\\" + "MyAwesomeExcelWorkbook_"
+ (DT_WSTR,4)DATEPART("year", GETDATE())+ "-"
+ RIGHT("0" + (DT_WSTR,2)DATEPART("mm", GETDATE()), 2) + "-"
+ RIGHT("0" + (DT_WSTR,2)DATEPART("dd", GETDATE()), 2) + "-"
+ RIGHT("0" + (DT_WSTR,2)DATEPART("hh", GETDATE()), 2) + "-"
+ RIGHT("0" + (DT_WSTR,2)DATEPART("mi", GETDATE()), 2) + "-"
+ RIGHT("0" + (DT_WSTR,2)DATEPART("ss", GETDATE()), 2)
+ ".xlsx"
Run Code Online (Sandbox Code Playgroud)
因此,我可以成功评估此表达式。每次程序包运行(失败)时,其值就是所期望的表达式的值。 …