2013-06-28 3 views
-1

Я пытаюсь получить последнюю строку в файле .HOL. Он получит последнюю строку, но каждый раз, когда вы запускаете скрипт, он складывает предыдущие строки.vbscript получить последнюю строку в тексте

Dim lastLine 
Dim objFile 
Dim objFSO 

Const ForReading = 1 

Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objFile = objFSO.OpenTextFile("C:\Desktop\OUTLOOK.HOL", ForReading) 

Do Until objFile.AtEndOfStream 

    lastLine = objFile.ReadLine 

Loop 

objFile.Close 

Wscript.Echo lastLine 

То, что я пытаюсь сделать это скрипт, который избавляется от любой даты, которая старше, чем текущая дата затем добавить новую дату в нижней части файла .HOL. Причина, по которой мне нужна последняя строка, заключается в том, что я могу принять эту дату и добавить к ней 2 недели.

What the Echo Looks like Run 1      Run 2 
Date1            Date1   
                Date2 
Run 3          
Date1 
Date2 
Date3 

And so forth if you get it. (Id post picture but I cant yet) 
=========== .HOL File ======= 
[Test Days] 5 
Test Day, 5/3/2013 
Test Day, 5/17/2013 
Test Day, 5/31/2013 
Test Day, 6/14/2013 
Test Day, 6/28/2013 
+0

Что вы подразумеваете под «складывает предыдущие строки»? Также вы не можете просто добавить дату в нижней части файла. Файлы '.HOL' имеют определенный формат. Простое добавление даты нарушит этот формат. Поэтому, пожалуйста, объясните подробнее, что вы хотите удалить и что хотите добавить. Пример будет полезен. –

+0

Формат включен. Мне просто нужна последняя дата файла, чтобы добавить 2 недели. Допустим, что вторая строка (в файле .HOL) - Test Day, 1/1/2013 (первая строка - [Test Days] 50. Последняя строка файла - Test Day, 6/6/2013 Итак, что я получил до сих пор является IF 2-й строкой Date JayBec

ответ

0

Простое исправление:

dim x 

    Do Until objFile.AtEndOfStream 
     x = objFile.ReadLine 
     If objFile.atEndOfStream Then 
     lastLine = x 
     End If 
    Loop 

Следующая функция добавит 2 недели до 31 января 2010 года, вам просто нужно составить, что с вашей линии:

DateAdd("ww",2,"31-Jan-10") 

пару правок .. это было какое-то время с vbscript!

+0

Когда файл уже находится в конце потока, нет ничего, что можно было бы прочитать, поэтому ваша команда будет просто заблокирована. –

+2

Это ставит скрипт в бесконечный цикл. Зачем вам нужен другой, если сказать, как только вы дойдете до конца файла, сохраните переменную? последняя строка после того, как цикл достигает конца? Выполняет ли .AtEndOfStream после последней строки файла или останавливается на последней строке? О, спасибо за DateAdd !!! Это сработало лучше, чем у меня было re – JayBec

+0

Он не будет блокировать, этот будет проходить только последним в потоке, поскольку readline - это функция, которая перемещается в следующую строку .. duh? –

0

Если вы хотите заменить последнюю дату в файл, который вы могли бы попробовать что-то вроде этого:

Set fso = CreateObject("Scripting.FileSystemObject") 

text = Split(fso.OpenTextFile("C:\Desktop\OUTLOOK.HOL").ReadAll, vbNewLine) 

Set f = fso.OpenTextFile(filename, 2) 
For i = 0 To UBound(text)-1 
    f.WriteLine text(i) 
Next 

lastline = Split(text(UBound(text)), ",") 
newdate = DateAdd("ww", 2, lastline(1)) 
lastline(1) = Year(newdate) & "/" & Right("0" & Month(newdate), 2) _ 
       & "/" & Right("0" & Day(newdate), 2) 
f.WriteLine Join(lastline, ",") 

f.Close