【问题标题】:How do I insert a comma before a date in an URL?如何在 URL 中的日期前插入逗号?
【发布时间】:2014-11-21 18:21:17
【问题描述】:

所以我有大约。 8.000 个 URL,其中大多数在日期部分之前都缺少逗号,我需要那个该死的逗号才能通过我的本科。

例子:

(...)_employee_declarations_legal_complaint_and_motions_2009 (应该是:motions,_2009)
(...)/wiki/Xinhua_Presidential_Express_18_Jun_2009(应为:快递,_18_Jun_2009) (...)guide_for_law_enforcement_23_Dec_2008(应该是:执行,_23_Dec_2008)

等等。我需要在 Excel 中自动插入逗号。这甚至可能吗?你能告诉它在## _ text _ #### 或类似的东西之前插入一个逗号吗?当日期不同时,替换将不起作用。

最大的问题是,我不是程序员。我是一名政治学本科专业的学生,​​试图对维基解密进行统计分析。

顺便说一句:问题不在于我输入错误(从 CSV 到 Excel),其他地方有很多逗号。问题是我使用 import.io 作为数据抓取器,这可能是他们的错误。

【问题讨论】:

  • 如果它们都被格式化为_23_Dec_2008 格式(日期始终为 2 位)我会说你可以用 excel 来做,但如果你的格式不一致,我想你会需要使用其他工具
  • 是的,他们并不都这样。但如果只有 >20 种格式,那么我会一次又一次地做。如果是 _23_Dec_2008 格式(两位,文本,然后是四位),那么您将如何在 excel 中执行此操作?
  • 您可能没有考虑过的一件事是整个值必须随后用双引号等文本标识符包裹,否则字段值会变成两个字段。如果您将其导入 Excel,您可以使用 VBA 对其进行修复并将其导出回 .CSV,并使用双引号作为文本标识符来包装每个可能包含逗号的字段。

标签: excel csv


【解决方案1】:

您可以在 CSV 文件上使用文本编辑器(如果它支持 Perl 风格的正则表达式)并告诉它替换

_(?:\d{1,2}_[A-Za-z]{3}_)?(?:19|20)\d{2}\b

,\0

【讨论】:

  • 可能是您的编辑器需要不同的反向引用语法,而不是 \0,后者包含 UltraEdit 或 EditPad Pro 等编辑器中正则表达式的匹配文本。
  • 这可能是我应该做的,但我不知道如何运行正则表达式 - 还没有学会,而且我没有时间在我的截止日期之前。这就是为什么我迫切需要在 excel 中做到这一点。
【解决方案2】:

如果大多数格式是“_23_Dec_2008”,我假设日期总是在字符串的末尾。试试

=REPLACE(A1,FIND(RIGHT(A1,12),A1,0,",")
  1. 12 是指日期中的字符数,即日期格式“_23_Dec_2008”为 12
  2. 1 表示要修改的字符串的起始字符,即从_开始
  3. 0 表示要修改的字符数,即无
  4. “,”在下划线前添加逗号

只需将第一行修改为不同长度的日期

希望对你有帮助

【讨论】:

    【解决方案3】:

    在您提到的 cmets 中,大约有 20 种不同的格式。以下是三个(两个是因为您的样本对 ddd 的关系模棱两可)。

    Sub fix_urls()
        Dim fw As String, rw As String, i As Long, iOldCalc As Long
    
        On Error GoTo Fìn
        Application.ScreenUpdating = False
        Application.EnableEvents = False
        Application.Calculation = xlCalculationManual
    
        With ActiveSheet.UsedRange.Cells
            'replace the days both ways as the sample data was ambiguous
            For i = 1 To 31
                fw = Format(i, "_00_")  'find what
                rw = Format(i, "\,_00_")  'replace with
                 .Replace What:=fw, Replacement:=rw, LookAt:=xlPart, MatchCase:=False
                fw = Format(i, "_0_")  'find what
                rw = Format(i, "\,_0_")  'replace with
                 .Replace What:=fw, Replacement:=rw, LookAt:=xlPart, MatchCase:=False
            Next i
            For i = 2000 To 2014
                fw = Format(i, "_0000")  'find what
                rw = Format(i, "\,_0000")  'replace with
                 .Replace What:=fw, Replacement:=rw, LookAt:=xlPart, MatchCase:=False
            Next i
        End With
    
    Fìn:
        Application.Calculation = xlCalculationAutomatic
        Application.EnableEvents = True
        Application.ScreenUpdating = True
    End Sub
    

    仔细计划你的攻击。仔细查看 20 多种格式,确保其中一种不能取代另一种的误报。通常有一个规定的顺序,必须执行更换。

    例如,在上面使用的三个格式掩码中,如果 _dd_ 只是 _dd 那么带有xlPart_20 将取代任何_2000_2001_2002 等。请小心并保留一些备份。

    只是提醒我上面的评论;使用这些插入的逗号,您需要使用 文本限定符,以便文本字段中间的逗号不会将该字段的值分成两个字段。 Excel应该在简单的Save As ► .CSV 上为您执行此操作,但它会查看数据预设的行数,以确定是否在字段上使用带引号的标识符。这个 look-ahead 值可以通过注册表来提高,但这通常不是必需的。

    【讨论】:

      猜你喜欢
      • 2011-08-20
      • 2015-09-02
      • 2023-03-11
      • 1970-01-01
      • 2013-01-24
      • 2017-04-01
      • 2021-05-28
      • 1970-01-01
      • 2020-05-17
      相关资源
      最近更新 更多