Показать полную графическую версию : Разделение текстового файла на части или по строкам.
Есть текстовый файл,с большим количеством строк.
Как лучше и быстрее разделить такое кол-во файлов средствами .vbs
Можно и .bat.
В идеале, чтобы в каждом новом текстовом файле была одна строка.
И новые имена текстовых файлов были от 1 и выше,в формате с одной цифрой.(т.е. не 01,или 001, а 1).
greg zakharov
25-10-2020, 21:24
Людям свойственно усложнять абсолютно всё, в том числе элементарные задачи. Можно писать "портянки" на WSH, вот только зачем, когда уже десятки лет существуют проверенные временем инструменты, позволяющие решать задачи коротко и ясно. Например:
echo.>>file.txt && (miniperl -pe "s/^/>$..txt echo /" file.txt | cmd>nul) && del /f/q file.txt
Можно awk'ом или любыми другими утилитами и интерпретаторами. Что касается лучше и быстрее... если отбросить в сторону нюансы архитектур процессоров, каждый будет пропихивать свои идеи. А что из того верно, выводы делает каждый сам. Ибо для чего человеку мозг?
Есть текстовый файл,с большим количеством строк. »
Не помешал бы образец этого текстового файла с большим количеством строк в архиве.
А так:
Option Explicit
Dim strSourceFile
Dim objFSO
Dim arrContent
Dim i
Dim strLine
If WScript.Arguments.Count = 1 Then
strSourceFile = WScript.Arguments.Item(0)
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(strSourceFile) Then
With objFSO.OpenTextFile(strSourceFile)
arrContent = Split(.ReadAll(), vbCrLf)
.Close
End With
i = 0
For Each strLine In arrContent
i = i + 1
With objFSO.CreateTextFile(CStr(i) & ".txt", True)
.Write strLine
.Close
End With
Next
Else
WScript.Echo "Can't find source file [" & strSourceFile & "]."
WScript.Quit 2
End If
Set objFSO = Nothing
Else
WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source file>"
WScript.Quit 1
End If
WScript.Quit 0
Имя исходного файла задаётся параметром скрипта (также можно просто перетащить исходный файл на скрипт в Проводнике).
greg zakharov
25-10-2020, 22:28
Iska, а использовать потоки уже не модно?
Не помешал бы образец этого текстового файла с большим количеством строк в архиве »
например этот,хотя реальное кол-во строк больше.
Iska, а использовать потоки уже не модно? »
После DOS перестало быть модным. Это мне под Far Manager'ом осталось удобно.
serg515, пробуйте. Должно работать.
<Source file> »
прописываю имя файла.что-то нужно ещё менять или дополнять?
что-то нужно ещё менять или дополнять? »
Нет:
https://i.imgur.com/lKn67Tk.png
DJ Mogarych
26-10-2020, 14:21
Powershell:
$c = 1
gc "D:\temp\strings.txt" |% {
Set-Content "D:\temp\splitted\$c.txt" -Value $_
$c++
}
greg zakharov
26-10-2020, 14:41
DJ Mogarych, а что мешает обойтись единственным for'ом? Хотя...
(Select-String \S X:\path\file.txt).ForEach{$_.Line>"$($_.Linenumber).txt"}
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.