PDA

Показать полную графическую версию : Удаление всех пробельных символов в текстовых файлах.


Страниц : [1] 2

serg515
21-10-2020, 19:52
Нужно удалить все пробелы + возможный перевод каретки и в некоторых случаях переносы строк(так как, кое-где это тоже самое).
Есть большое количество текстовых файлов с пробелами в папке.
Нужно удалить все пробелы и т.д. из содержимого.
т.е.

пробел текст пробел текст пробел
пробел текст пробел текст пробел
пробел текст пробел текст пробел
пробел текст пробел текст пробел
пробел

надо:

текст
текст
текст
текст
здесь строка не пустая,её просто нет,точнее не должно быть.

Есть код:
setlocal EnableDelayedExpansion
set folder=,\fld\
for %%i in (%folder%*) do call :del_blanks %folder% %%i
exit /b

:del_blanks
ren %1%2 file.tmp
for /f "tokens=*" %%i in (%1file.tmp) do @set ss=%%i & echo! ss: =!>> %1%2
del %1file.tmp
exit /b

но где-то в нём ошибка..??

Iska
21-10-2020, 22:15
но где-то в нём ошибка..?? »
Одна большая ошибка — в использовании пакетного файла.

Пользуйте WSH/PoSH.

DJ Mogarych
21-10-2020, 22:32
Нужно удалить все пробелы »
Откуда? Из имён файлов или из их содержимого?

Из имён можно так (powershell):

dir "C:\temp\folder\*.txt" |% {ren $_.FullName -NewName $($_.Name -replace "\s+")}


Из содержимого - так:

dir "C:\temp\folder\*.txt" |% {(gc $_) -replace "\s+" |sc $_}

serg515
22-10-2020, 12:28
К сожалению ни один из вариантов ,не удаляет пробел (переход на следующую строку).

Foreigner
22-10-2020, 12:56
не удаляет пробел (переход на следующую строку). »
Все содержимое в каждом файле надо без пробелов в одну строку?

foreach ($file in (Get-Childitem "C:\Folder\*.txt"))
{
-join (Get-Content $file).Split() | Set-Content $file
}

serg515
22-10-2020, 13:02
foreach ($file in (Get-Childitem "C:\Folder\*.txt"))
{
-join (Get-Content $file).Split() | Set-Content $file
} »

пробел текст пробел
пробел текст пробел
пробел текст пробел
пробел

надо:

текст
текст
текст

Foreigner
22-10-2020, 13:27
надо: »

Уберите оператор -join

foreach ($file in (Get-Childitem "C:\Folder\*.txt"))
{
(Get-Content $file).Split().Where{ $_ } | Set-Content $file
}

serg515
22-10-2020, 13:52
Уберите оператор -join
Код:
foreach ($file in (Get-Childitem "C:\Folder\*.txt"))
{
(Get-Content $file).Split().Where{ $_ } | Set-Content $file
} »

не меняется.только в некоторых файлах в начале пробелы появляются.

Foreigner
22-10-2020, 14:13
не меняется.только в некоторых файлах в начале пробелы появляются. »
Извиняюсь, неправильно понял:

foreach ($file in (Get-Childitem "C:\Folder\*.txt"))
{
(Get-Content $file).Trim().Split().Where{ $_ } | Set-Content $file
}

serg515
22-10-2020, 14:21
foreach ($file in (Get-Childitem "C:\Folder\*.txt"))
{
(Get-Content $file).Trim().Split().Where{ $_ } | Set-Content $file
} »

остаётся пробел перехода.в некоторых строках нарушается последовательность.

Uragan66
22-10-2020, 14:46
остаётся пробел перехода.в некоторых строках нарушается последовательность. »
Foreach ($file in (Get-Childitem "C:\Folder\*.txt"))
{
(Get-Content $file).Trim() | where {$_ -ne ""} | Set-Content $file
}

serg515
22-10-2020, 15:00
Код:
Foreach ($file in (Get-Childitem "C:\Folder\*.txt"))
{
(Get-Content $file).Trim() | where {$_ -ne ""} | Set-Content $file
} »

тоже самое.

megaloman
22-10-2020, 15:40
@Echo Off
Set "Folder=Z:\Box_In"
Set "Mask=*.*"
FOR %%f IN ("%Folder%\%Mask%") DO (
>"%%f.tmp" (FOR /F "usebackq delims=" %%s IN (`More "%%f"`) DO (
Set "SS=%%s"
(Call :MyOut "%%SS: =%%")
))
>nul Move /Y "%%f.tmp" "%%f"
)
Exit /B

:MyOut
(If Not %1=="" Echo %~1)
Exit /B

serg515
22-10-2020, 15:50
Код:
@Echo Off
Set "Folder=Z:\Box_In"
Set "Mask=*.*"
FOR %%f IN ("%Folder%\%Mask%") DO (
>"%%f.tmp" (FOR /F "usebackq delims=" %%s IN (`More "%%f"`) DO (
Set "SS=%%s"
(Call :MyOut "%%SS: =%%")
))
>nul Move /Y "%%f.tmp" "%%f"
)
Exit /B
:MyOut
(If Not %1=="" Echo %~1)
Exit /B »


остаётся так же пробел (переход на новую строку).

Foreigner
22-10-2020, 15:55
остаётся пробел перехода.в некоторых строках нарушается последовательность.»

Приложите файл. У меня все отрабатывает. Или вы имеете ввиду самый последний перевод строки?


foreach ($file in (Get-Childitem "C:\Folder\*.txt"))
{
((Get-Content $file).Trim().Split().Where{$_} | Out-String).Trim() | Set-Content $file -NoNewline
}

serg515
22-10-2020, 16:00
Приложите файл. У меня все отрабатывает. Или вы имеете ввиду самый последний перевод строки? »

да.самый последний,переход на новую пустую строку.

DJ Mogarych
22-10-2020, 16:50
пробел (переход на следующую строку) »
Это разные вещи.

serg515
22-10-2020, 17:04
Это разные вещи. »

возможно.хотя не все считают это не единым понятием,в т.ч. разработчики определённого сотфа.

DJ Mogarych
22-10-2020, 20:57
serg515, дело не в том, как кто считает, а в постановке задачи, когда сначала непонятно, откуда убирать пробелы, а потом оказывается, что пробелами именуются и переводы строки.


dir "C:\temp\folder\*.txt" |% {(gc $_ -raw) -replace "\s+|`n" |sc $_}

serg515
22-10-2020, 21:33
DJ Mogarych,
просто некоторые и переводы строки относят к пробелам.
шапку дополнил.




© OSzone.net 2001-2012