|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Замена символов на другие в огромном файле |
|
Любой язык - [решено] Замена символов на другие в огромном файле
|
Новый участник Сообщения: 42 |
Профиль | Отправить PM | Цитировать Здравствуйте! У меня внезапная проблема возникла. Есть txt файл в котором несколько миллионов строк. Да да миллионов. мне нужно просто добавить 1 символ в конец каждой строки но ни одно виденное мной приложение с этим не справлялось из-за огромного объема входных данных. Так вот у меня вопрос. Как и чем можно сделать такую простую операцию?
З.ы. Возможно я написал не в тот раздел, но другого подходящего я не нашел. |
|
Отправлено: 04:43, 30-09-2012 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать |
Отправлено: 05:59, 30-09-2012 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2726
|
Профиль | Отправить PM | Цитировать vbs-скрипт
InFile = "D:\Примеры макроса\Для тестирования 10000.txt" ' Путь к текстовому файлу Set FSO = CreateObject("Scripting.FileSystemObject") EndBottom = "}" ' Вставляем символ(ы) в конец каждой строки InSave = 1 ' =0 -Не сохраним копию исходного файла, не 0 -сохраним ' Если надо сохранить исходный файл в .bak If InSave <> 0 Then On Error Resume Next Set F1 = FSO.GetFile(InFile) If Err.Number = 0 Then F1.Copy InFile + ".bak" F1.Close End If End If ' Читаем исходный файл, переписываем строки в tmp-файл, переименовываем tmp Set F1 = FSO.OpenTextFile(InFile, 1, False) On Error Resume Next Set F2 = FSO.OpenTextFile(InFile + ".tmp", 2, True) BegTop = "" If Err.Number = 0 Then Messa = CStr(Time) + " Обработка начата" + Chr(13) + Chr(10) Do While Not F1.AtEndOfStream iString = F1.ReadLine F2.Write BegTop + iString + EndBottom BegTop = vbCrLf Loop F1.Close F2.Close On Error Resume Next FSO.CopyFile InFile + ".tmp", InFile, True If Err.Number = 0 Then FSO.DeleteFile InFile + ".tmp", True Else Messa = Messa + CStr(Time) + " Не удалось скопировать TMP" + Chr(13) + Chr(10) End If Else Messa = Messa + "Ошибка при открытии файла " + Chr(13) + Chr(10) + InFile + ".tmp" + Chr(13) + Chr(10) + Err.Description + Chr(13) + Chr(10) End If Messa = Messa + CStr(Time) + " Обработка закончена" + Chr(13) + Chr(10) L = MsgBox(Messa, 0, "Обработка " + InFile) |
------- Отправлено: 13:28, 30-09-2012 | #3 |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать огромное спасибо за 2ой вариант!
|
Отправлено: 14:57, 30-09-2012 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
|
Отправлено: 16:28, 30-09-2012 | #5 |
Ветеран Сообщения: 2726
|
Профиль | Отправить PM | Цитировать Iska, Не хотел использовать WriteLine, так как при этом в конец строки автоматом пишется Cr Lf, что приводит к лишней пустой строке в конце текстового файла, меня это угнетает. Можно, конечно, объединить 2 строки и другой Do, как сделано у Вас, но это не принципиально, делал этот скрипт из старого с другими целями. Спасибо за вопрос, можете предложить иной вариант?
Пример обрабатываемого файла
А вот вариант, где создание .bak файла сделано экономнее с точки зрения места на диске и времени InFile = "D:\Примеры макроса\Для тестирования 10000.txt" ' Путь к текстовому файлу Set FSO = CreateObject("Scripting.FileSystemObject") EndBottom = "}" ' Вставляем символ(ы) в конец каждой строки InSave = 1 ' =0 -Не сохраним копию исходного файла, не 0 -сохраним ' Читаем исходный файл, переписываем строки в tmp-файл, переименовываем tmp Set F1 = FSO.OpenTextFile(InFile, 1, False) On Error Resume Next Set F2 = FSO.OpenTextFile(InFile + ".tmp", 2, True) BegTop = "" If Err.Number = 0 Then Messa = CStr(Time) + " Обработка начата" + vbCrLf Do Until F1.AtEndOfStream iString = F1.ReadLine F2.Write BegTop + iString + EndBottom BegTop = vbCrLf ' F2.WriteLine F1.ReadLine + EndBottom Loop F1.Close F2.Close ' Если надо сохранить исходный файл в .bak If InSave <> 0 Then On Error Resume Next FSO.MoveFile InFile, InFile + ".bak" If Err.Number = 0 Then FSO.MoveFile InFile + ".tmp", InFile Else Messa = Messa + CStr(Time) + " Не удалось создать .Bak " + Err.Description + vbCrLf End If Else On Error Resume Next FSO.CopyFile InFile + ".tmp", InFile, True If Err.Number = 0 Then FSO.DeleteFile InFile + ".tmp", True Else Messa = Messa + CStr(Time) + " Не удалось скопировать TMP " + Err.Description + vbCrLf End If End If Else Messa = Messa + "Ошибка при открытии файла " + vbCrLf + InFile + ".tmp" + vbCrLf + Err.Description + vbCrLf End If Messa = Messa + CStr(Time) + " Обработка закончена" + vbCrLf L = MsgBox(Messa, 0, "Обработка " + InFile) |
------- Последний раз редактировалось megaloman, 01-10-2012 в 05:51. Отправлено: 18:02, 30-09-2012 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
|
Отправлено: 06:03, 01-10-2012 | #7 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
VBS/WSH/JS - [решено] Замена определённых символов и вставка текста. | aggressor_ | Скриптовые языки администрирования Windows | 9 | 29-05-2012 15:06 | |
RAID - Замена дисков RAID1 на другие (контроллер INTEL) | bombording | Накопители (SSD, HDD, USB Flash) | 7 | 23-08-2010 20:30 | |
Разное - Различные кодировки символов в одном файле | EvgeniyQQQ | Программирование и базы данных | 3 | 21-05-2009 06:49 | |
Замена символов при вводе | Giorgievich | Вебмастеру | 5 | 06-02-2004 11:31 | |
Замена символов | Guest | Программирование и базы данных | 13 | 20-03-2003 17:55 |
|