Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Разделение текстового файла на части или по строкам. (http://forum.oszone.net/showthread.php?t=346815)

serg515 25-10-2020 18:26 2937528

Разделение текстового файла на части или по строкам.
 
Есть текстовый файл,с большим количеством строк.
Как лучше и быстрее разделить такое кол-во файлов средствами .vbs
Можно и .bat.
В идеале, чтобы в каждом новом текстовом файле была одна строка.
И новые имена текстовых файлов были от 1 и выше,в формате с одной цифрой.(т.е. не 01,или 001, а 1).

greg zakharov 25-10-2020 21:24 2937537

Людям свойственно усложнять абсолютно всё, в том числе элементарные задачи. Можно писать "портянки" на WSH, вот только зачем, когда уже десятки лет существуют проверенные временем инструменты, позволяющие решать задачи коротко и ясно. Например:
Код:

echo.>>file.txt && (miniperl -pe "s/^/>$..txt echo /" file.txt | cmd>nul) && del /f/q file.txt
Можно awk'ом или любыми другими утилитами и интерпретаторами. Что касается лучше и быстрее... если отбросить в сторону нюансы архитектур процессоров, каждый будет пропихивать свои идеи. А что из того верно, выводы делает каждый сам. Ибо для чего человеку мозг?

Iska 25-10-2020 22:14 2937544

Цитата:

Цитата serg515
Есть текстовый файл,с большим количеством строк. »

Не помешал бы образец этого текстового файла с большим количеством строк в архиве.

А так:
Скрытый текст
Код:

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 2937549

Iska, а использовать потоки уже не модно?

serg515 26-10-2020 04:49 2937567

Вложений: 1
Цитата:

Цитата Iska
Не помешал бы образец этого текстового файла с большим количеством строк в архиве »

например этот,хотя реальное кол-во строк больше.

Iska 26-10-2020 05:25 2937568

Цитата:

Цитата greg zakharov
Iska, а использовать потоки уже не модно? »

После DOS перестало быть модным. Это мне под Far Manager'ом осталось удобно.


serg515, пробуйте. Должно работать.

serg515 26-10-2020 06:08 2937569

Цитата:

Цитата Iska
<Source file> »

прописываю имя файла.что-то нужно ещё менять или дополнять?

Iska 26-10-2020 06:59 2937570

Цитата:

Цитата serg515
что-то нужно ещё менять или дополнять? »

Нет:
Скрытый текст

DJ Mogarych 26-10-2020 14:21 2937612

Powershell:
Код:

$c = 1
gc "D:\temp\strings.txt" |% {
Set-Content "D:\temp\splitted\$c.txt" -Value $_
$c++
}


greg zakharov 26-10-2020 14:41 2937617

DJ Mogarych, а что мешает обойтись единственным for'ом? Хотя...
Код:

(Select-String \S X:\path\file.txt).ForEach{$_.Line>"$($_.Linenumber).txt"}


Время: 23:37.

Время: 23:37.
© OSzone.net 2001-