Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Доктор Зойдберг
Краб-с
104 / 88 / 21
Регистрация: 19.05.2012
Сообщений: 455
1

Переписать построчно содержимое файла, начиная с последней строки и заканчивая первой

14.12.2015, 18:21. Просмотров 953. Ответов 11
Метки нет (Все метки)

Есть input.txt, с содержимым например:
Код
111
222
333
444
Есть output.txt

Нужно из input.txt перенести строки в output.txt в обратном порядке:
Код
444
333
222
111
Я бы сделал что то вроде этого:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
@echo off
 
set input=input.txt
set output=output.txt
 
setlocal enabledelayedexpansion
 
for /f "tokens=*" %%S in (!input!) do (
set string=%%S!string!
)
 
echo.!string!>!output!
Но как сохранить перенос строки?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2015, 18:21
Ответы с готовыми решениями:

Вывести на экран текст из файла, начиная со строки № M и заканчивая строкой № N
Написать bat-файл выделения блока с m-ой по n-ю строку Сначала нужно посчитать строки, потом...

Вывод файла начиная с последней строки
Здравствуйте, подскажите пожалуйста как вывести файл, начиная с последний строки, что нужно...

Функция: сравнение первой строки первого текстового файла и последней строки второго файла
Даны два текстовый файла, состоящие из некоторого количества строк. Написать функцию для сравнения...

Вывести строки из текстового файла, начиная с последней
Собственно сабж. Имеется текстовый файл, в который записан любой текст построчно. (например:...

Определить, является ли палиндромом часть строки s, начиная с i-го символа и заканчивая j-ым (рекурсия)
Разработать рекурсивную функцию, возвращающую значение, определяющую:является ли палиндромом часть...

11
iCCupPlatoon
23 / 23 / 10
Регистрация: 25.03.2014
Сообщений: 211
14.12.2015, 19:10 2
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Echo Off
SetLocal EnableExtensions EnableDelayedExpansion
find /c /v "" <"input.txt" >tmp.txt
for /f "usebackq  delims=" %%i in (`find /n /v "" tmp.txt ^| find "[1]"`) do (
    set value=%%i
)
del tmp.txt
Set count=!value:~3!
for /l %%a in (!count!, -1, 1) do (
    set var=%%a
    for /f "usebackq  delims=" %%b in (`find /n /v "" input.txt ^| find "[!var!]"`) do (
        set value2=%%b
        echo !value2:~3! >>output.txt
    )
)
0
Доктор Зойдберг
Краб-с
104 / 88 / 21
Регистрация: 19.05.2012
Сообщений: 455
14.12.2015, 19:36  [ТС] 3
iCCupPlatoon, Спасибо.

Я конечно не знаток. Но обязательно ли использовать столько циклов перебирая файлы?
Слишком долгой будет обработка хоть сколько-нибудь больших файлов.

Ну и там после
Windows Batch file
find /c /v "" <"input.txt" >tmp.txt
стоит что то вроде
Windows Batch file
copy nul output.txt
А то он не будет очищаться а дописывать.
0
iCCupPlatoon
23 / 23 / 10
Регистрация: 25.03.2014
Сообщений: 211
14.12.2015, 19:39 4
Доктор Зойдберг, перебор только в конце серьезный, в первой части - одна итерация.
Дайте мне большой файл, и я скажу за сколько он выполнится =)
0
14.12.2015, 19:39
Доктор Зойдберг
Краб-с
104 / 88 / 21
Регистрация: 19.05.2012
Сообщений: 455
14.12.2015, 19:45  [ТС] 5
iCCupPlatoon, Первый то бог с ним. Это же всего лишь получение количества строк?

Попробовал на 2500 строк(мелких)

Он почему в output стал ложить строки вида:
Код
59]888 
58]777 
57]555 
56]444 
55]333 
54]222 
53]111 
52]888 
51]777 
50]555 
49]444 
48]333 
47]222 
46]111 
45]888 
44]777 
43]555 
42]444 
41]333 
40]222 
39]111 
38]888 
37]777 
36]555 
35]444 
34]333 
33]222 
32]111 
31]888 
30]777 
29]555 
28]444 
27]333 
26]222 
25]111 
24]888 
23]777 
22]555 
21]444 
20]333 
19]222 
18]111 
17]888 
16]777 
15]555 
14]444 
13]333 
12]222 
11]111 
10]888 
09]777 
08]555 
07]444 
06]333 
05]222 
04]111 
03]888 
02]777 
01]555 
00]444 
99]333 
98]222 
97]111 
96]888 
95]777 
94]555
Это потому что слишком много строк?
0
iCCupPlatoon
23 / 23 / 10
Регистрация: 25.03.2014
Сообщений: 211
14.12.2015, 19:46 6
Это потому что щас исправлю =) А можете приаттачить тот самый большой файл?
0
Доктор Зойдберг
Краб-с
104 / 88 / 21
Регистрация: 19.05.2012
Сообщений: 455
14.12.2015, 19:47  [ТС] 7
Точнее так.
Всё что больше нескольких строк он начал добавлять сначала
Код
]777 
]555 
]444 
]333 
]222 
]111 
]888 
]777 
]555 
]444 
]333 
]222 
]111 
]888 
]777 
]555 
]444 
]333
Дальше больше, то что выше
0
iCCupPlatoon
23 / 23 / 10
Регистрация: 25.03.2014
Сообщений: 211
14.12.2015, 20:14 8
Доктор Зойдберг,
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@Echo Off
SetLocal EnableExtensions EnableDelayedExpansion
find /c /v "" <"input.txt" >tmp.txt
for /f "usebackq  delims=" %%i in (`find /n /v "" tmp.txt ^| find "[1]"`) do (
    set value=%%i
)
del tmp.txt
Set count=!value:~3!
for /l %%a in (!count!, -1, 1) do (
    set var=%%a
    echo Strings to end: !var!
    for /f "usebackq  delims=" %%b in (`find /n /v "" input.txt ^| find "[!var!]"`) do (
        set value2=%%b
        if !var! LSS 10 (
            echo !value2:~3! >>output.txt
        ) Else if !var! LSS 100 (
            echo !value2:~4! >>output.txt
        ) Else if !var! LSS 1000 (
            echo !value2:~5! >>output.txt
        ) Else if !var! LSS 10000 (
            echo !value2:~6! >>output.txt
        ) Else if !var! LSS 100000 (
            echo !value2:~7! >>output.txt
        ) Else if !var! LSS 1000000 (
            echo !value2:~8! >>output.txt
        ) Else if !var! LSS 10000000 (
            echo !value2:~9! >>output.txt
        )
    )
)
Работает на магии.
1
Доктор Зойдберг
Краб-с
104 / 88 / 21
Регистрация: 19.05.2012
Сообщений: 455
14.12.2015, 20:34  [ТС] 9
iCCupPlatoon, iCCupPlatoon, Да, корректно.
Ну а чтобы красивее было, нельзя ли определить длину переменной count и использовать одно условие?
0
iCCupPlatoon
23 / 23 / 10
Регистрация: 25.03.2014
Сообщений: 211
14.12.2015, 20:36 10
Доктор Зойдберг, работает - не трогай. Хороший завет, стараюсь придерживаться.
0
Доктор Зойдберг
Краб-с
104 / 88 / 21
Регистрация: 19.05.2012
Сообщений: 455
14.12.2015, 20:39  [ТС] 11
iCCupPlatoon, Спасибо за решение)
Но хочется всегда идеализма.
Чтобы и больше 10 миллионов и меньше строк)

Я не принуждаю. Спасибо.
0
Garry Galler
2385 / 1795 / 674
Регистрация: 28.10.2013
Сообщений: 4,581
15.12.2015, 01:32 12
Цитата Сообщение от iCCupPlatoon Посмотреть сообщение
Дайте мне большой файл, и я скажу за сколько он выполнится
Вы наверно никогда не работали с файлами в миллионы строк, иначе был знали, что время их обработки на bat
+-∞.
Цитата Сообщение от Доктор Зойдберг Посмотреть сообщение
Но хочется всегда идеализма.
Чтобы и больше 10 миллионов и меньше строк)
Никогда не поздно узнать, что на windows (не старее win 7) существуют инструменты работающие в N-раз производительнее, нежели cmd.

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<# :
  @echo off
   pushd "%~dp0"
   powershell -NoLogo -NoProfile -ExecutionPolicy Bypass -command ^
     "&{[ScriptBlock]::Create((cat '%~f0') -join [Char]10).Invoke(@(&{$args}%*))}"
  exit /b
#>
 
Param (
[string]$filein,
[string]$fileout
) 
 
Add-Type @'
using System;
using System.Text;
using System.Linq;
using System.IO;
 
namespace Sharp {
    public class Words{
        public static void Reverse(string[] args){  
            var words = File.ReadLines(args[0], Encoding.Default);
                var words2 = words.Reverse();
                    File.WriteAllLines(args[1], words2, Encoding.Default);
                        words=null;words2=null;
        }
    }
}
'@
# старт замера времени
$startTiks = [DateTime]::Now.Ticks
 
[Sharp.Words]::Reverse(@($filein, $fileout))                # содержимое файла $filein: 2 937 113 строк
([TimeSpan]([DateTime]::Now.Ticks - $startTiks)).ToString() # время выполнения=>00:00:02.6700037 sec
Запускать из cmd:
Код
reverse.bat 1.txt 1_out.txt
0
15.12.2015, 01:32
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2015, 01:32

Определить, совпадают ли первое слово в первой строке файла с первым словом последней строки файла.
1)Определить, совпадают ли первое слово в первой строке файла с первым словом последней строки...

Определить, совпадают ли первое слово в первой строке файла с первым словом последней строки файла
Определить, совпадают ли первое слово в первой строке файла с первым словом последней строки файла.

Определить, совпадают ли первое слово в первой строке файла с первым словом последней строки файла
Доброго времени суток! Нужна помощь с решением задачи по теме &quot;Файлы&quot;. Буду очень признателен за...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru