【发布时间】:2018-04-21 14:02:58
【问题描述】:
首先,我知道有一百万个关于格式化日期的问题,但我还没有找到适合我情况的解决方案。
我们得到一个 .csv 文件,由于要求,我们必须通过几种方式修改该文件。
首先,我们在文件上运行 VBA,以便将分隔符从“,”更改为“|” (我们有这个工作)使用:
Const ForReading = 1
Const ForWriting = 2
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\Users\Z00393885\Desktop\csvStuff\"&myVar, ForReading)
count = 0
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
strReplacer = Chr(34) & "," & Chr(34)
strLine = Replace(strLine, strReplacer, "|")
strLine = Replace(strLine, chr(34), "")
strNewText = strNewText & strLine & vbCrLF
count = count + 1
Loop
Print (count - 1)
objFile.Close
Set objFile = objFSO.OpenTextFile("C:\Users\Z00393885\Desktop\csvStuff\"&myVar, ForWriting)
objFile.WriteLine "BOF" & vbCrLF & now() & vbCrLF & (count - 1) & vbCrLF & strNewText & "EOF"
objFile.Close
第二个要求是给我带来麻烦的要求,我必须查找存在的每个日期(它们的格式为:11/8/2017 1:30 EST 并且位于第 10 列和第 11 列内)并格式化日期,使其为 2017 年 8 月 11 日(我们需要删除时间,并确保日期和月份只有一个数字时为 0)
这在“直到”循环中可行吗?还是有一个单独的功能来处理那部分会更好。无论哪种方式,我什至不确定从哪里开始在这样的文件中操作日期,而不仅仅是一个变量
编辑:这里是一些 .csv 文件
转炉
2017 年 11 月 1 日下午 12:08:21
3
课程代码|主组织|...|发布日期|生效日期|...|网址
123|TAD 网站|...|10/31/2017 00:00:00 EDT|11/14/2017 00:00:00 EDT|...|http://URL
456|DAT 站点|...|11/5/2017 00:00:00 EDT|11/5/2017 00:00:00 EDT|...|http://URL
EOF
【问题讨论】:
-
是的,在
Do Until循环中是可能的;没有理由两次处理文件。你有什么具体问题?我没有看到任何迹象表明您已经努力自己解决了这个问题。 -
请将源 .csv 文件的标题行和几条记录复制并粘贴为文本。
-
@KenWhite 我所拥有的只是一个关于如何去做这件事的想法。我的想法是遍历每一行,因为我已经有了这个,并寻找斜线符号,并根据它们相距多远,添加一个零?正如我所说,只是一个想法,因为除了更改分隔符之外我没有进行文件操作的经验
-
您需要在这里完成四个相对简单的任务:1) 找到日期。 2)将其复制到变量中。 3)将其修改为您需要的格式。 4)把它放回字符串中。所以从第一个任务开始。当你有完成它的代码时,添加第二个,然后是第三个,然后是最后一个。编程就是把事情分解成小任务,编写代码来完成这些任务,然后把它们放在一起完成工作。所以从任务 #1 开始。弄清楚你将如何在代码中找到日期值。
-
@KenWhite 感谢您的建议,我已经编程了一段时间,但是当我还没有遇到语言/情况时,我仍然会迷失在要采取的步骤中,我会尝试解决它
标签: string vba date formatting