2014-11-21 196 views
-2

所以我有约。 8.000个URL,其中大部分在他们的日期之前缺少一个逗号部分,我需要那个该死的逗号来通过我的本科生。如何在URL中的日期之前插入逗号?

例子:

(...)_employee_declarations_legal_complaint_and_motions_2009(应该是:运动,_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作为datascraper,这可能是他们的错误。

+0

如果他们都在'_23_Dec_2008'格式设置(与天始终是2位数字)我会说,你可以用Excel做,但如果你有不一致的格式,我认为你需要使用一些其他工具 – AtAFork 2014-11-21 18:28:34

+0

是的,他们不是全部那样。但是如果只有20多种格式,那么我会一次又一次地做。如果是_23_Dec_2008格式(两位数字,文本然后四位数字),那么您如何在Excel中执行此操作? – 2014-11-21 18:46:09

+0

您可能没有考虑过的一件事是,整个值*必须随后用文本标识符(如双引号)包裹,或者字段值将变成两个字段。如果你将它带入Excel,你可以使用VBA来修复它,并用双引号将它导出回.CSV,作为包含每个可能包含逗号的字段的文本标识符。 – Jeeped 2014-11-21 19:26:09

回答

0

你可以用文本编辑器在您的CSV文件(如果它支持Perl的正则表达式的风格),并告诉它与,\0更换

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

+0

这可能是因为你的编辑器需要不同的反向引用的语法,而不是'\ 0'其中包含了正则表达式的像UltraEdit的或的EditPad Pro编辑器匹配的文本。 – 2014-11-21 18:33:41

+0

这可能是我应该做的,但我不知道如何运行正则表达式 - 没有学过它,我在我的最后期限前没有时间。这就是为什么我非常需要在Excel中做到这一点。 – 2014-11-21 19:02:40

0

如果大部分是格式,即“_23_Dec_2008”,我假设日期是总是在字符串的结尾..尝试

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

只需要修改第一行不同长度的这些日期

希望这有助于

+0

@KarlKristiansen – 2014-11-21 19:42:13

0

在你提到的评论中有大约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 

仔细计划你的攻击。仔细观察二十多种格式,并确保无法取代另一种格式的误报。通常有一个规定的命令,必须在其中执行替换。

例如,在上面使用,如果_dd_仅为xlPart _dd然后_20将凌驾任何_2000三个格式掩码,_2001_2002等只是要小心并保留一些备份。

只是一个提醒我上面的评论;这些插入逗号,你需要使用一个文本识别符以便在文本字段中间的逗号不断裂的字段的值分为两个区域。 Excel中应该为你做一个简单的Save As ► .CSV但它看起来到数据行的预设数量,以确定是否要使用在现场带引号的标识符。这预测价值可以通过注册表,但通常是没有必要的。