Компьютерный форум 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=255593)

KooDI 05-03-2013 23:50 2105093

Как разбить одну строку на много строк
 
Доброго времени суток всем
Есть одна строка, в ней есть некоторые числа, которые разделены запятой или двоима или тремя запятыми.
Надо сделать так чтоб каждое число было в отдельной строке, которые есть с минусом что б были без минула, только числа, если можно, если нет, то пусть будут с минусами .
Пример
читать дальше »
Было
11111111,2222222,,,444444,777,,555555,,-1,-1,-1
Стало
11111111
2222222
444444
777
555555
1
1
1

Kazun 06-03-2013 09:20 2105235

PS Z:\> "11111111,2222222,,,444444,777,,555555,,-1,-1,-1".split("-,",[StringSplitOptions]::RemoveEmptyEntries)
11111111
2222222
444444
777
555555
1
1
1

gora 06-03-2013 11:11 2105304

Код:

@Echo Off
Set line=11111111,2222222,,,444444,777,,555555,,-1,-1,-1

Set line=%line:-=%
For %%i In (%line:,= %) Do Echo %%i
Pause


Iska 06-03-2013 12:35 2105362

До кучи ;):
Код:

Option Explicit

Dim strLine
Dim elem

strLine = "11111111,2222222,,,444444,777,,555555,,-1,-1,-1"

For Each elem In Split(strLine, ",")
        If elem <> "" Then
                WScript.Echo Abs(elem)
        End If
Next

WScript.Quit 0


KooDI 06-03-2013 14:15 2105464

Спасибо всем за ответы.
Вот только я ничего не понял, как с каждым кодом работать.
Если вам не трудно можете объяснить для каждого кода что делать.
Для первого я создал батник запустил, а он мне создал пустой файл и именем всех чисел.
Для второго тоже батник создал здесь уже лучше, запустил он выбил все числа по строках в консоли, но скопировать я их от туда не могу.
Уже подумал третий поможет, создал vbs, при запуске выбивают окошка с теме всеми числами по очереди и надо нажать на ок, но ничего не происходит, кидал файл с текстом на него тот же результат.

gora 06-03-2013 14:26 2105478

KooDI, Вы ни чего в ТЗ не сказали о том:
- где находится эта строка (прописана в скрипте, в текстовом файле, или будет передаваться скрипту в виде параметра)
- если в файле, то сколько там таких строк (одна или много)
- куда нужно вывести результат (окно, файл)
- если строк не одна, то результаты должны быть выведены в один файл или для каждой строки создавать свой
- какие имена файлов должны быть в последнем случае

KooDI 06-03-2013 14:34 2105487

Цитата:

Цитата gora
- где находится эта строка (прописана в скрипте, в текстовом файле, или будет передаваться скрипту в виде параметра) »

текстовом файле *.txt
Цитата:

Цитата gora
- если в файле, то сколько там таких строк (одна или много) »

одна
Цитата:

Цитата gora
- куда нужно вывести результат (окно, файл) »

если можно то в файл

gora 06-03-2013 14:43 2105496

Код:

@Echo Off
:: Файл со строкой 11111111,2222222,,,444444,777,,555555,,-1,-1,-1
Set list=e:\Temp\list.txt
:: Получаемый файл
Set OutFile=e:\Temp\OutFile.txt

For /F "tokens=* usebackq" %%i In ("%list%") Do Set line=%%i
Set line=%line:-=%
(For %%i In (%line:,= %) Do Echo %%i)>"%OutFile%"


KooDI 06-03-2013 15:02 2105505

gora, спасибо все робатае

Iska, пожалуйста можете написать скрип, что б просто перетаскиванием файла на скрипт создавался текстовый документ с результатом, просто хочу на кнопку повесить в тотале.

gora 06-03-2013 15:24 2105520

Цитата:

Цитата KooDI
хочу на кнопку повесить в тотале »

Скрипт KooDI.bat:
Код:

@Echo Off
For /F "tokens=* usebackq" %%i In ("%~1") Do Set line=%%i
Set line=%line:-=%
(For %%i In (%line:,= %) Do Echo %%i)>"%~dpn1_New%~x1"

Код кнопки на панели ТС:
Код:

TOTALCMD#BAR#DATA
e:\Temp\KooDI.bat
%P%N
E:\totalcmd64\Wcmicons.dll,67
Строка в столбик

1
-1

Пути в коде кнопки исправьте на свои
Новый файл создается рядом с исходным. Его имя формируется из имени исходного файла добавлением суффикса _New

KooDI 07-03-2013 00:12 2105867

gora, огромное вам спасибо за код, и за кнопку, все работает но есть одно но, код с большими файлами не работает, он создает файл с черточкой "-", и все.
Думал сначала что в строке попался какой то символ, по пробовал взять приведенный мной пример строки , продублировав ее до 11844 символов в строке, и код тоже не работал.

gora 07-03-2013 08:32 2105987

Цитата:

Цитата KooDI
код с большими файлами не работает »

Ограничение на длину значения переменной в CMD - 8кБ. Значит надо переходить на другой язык, например, на vbs.
На базе примера от Iska

Скрипт KooDI.vbs:
Код:

If WScript.Arguments.Count < 1 Then WScript.Quit
Set FSO = CreateObject("Scripting.FileSystemObject")
F = WScript.Arguments.Item(0)
Set rd_file = FSO.OpenTextFile(F, 1,, -2)
strLine = rd_file.ReadAll
rd_file.Close
Buffer = ""
For Each elem In Split(strLine, ",")
        If elem <> "" Then Buffer = Buffer & Abs(elem) & Chr(13) & Chr(10)
Next
Set wr_file = FSO.OpenTextFile(FSO.GetParentFolderName(F) & "\" & FSO.GetBaseName(F) _
                & "_New." & FSO.GetExtensionName(F), 2, True)
wr_file.Write Buffer
wr_file.Close
WScript.Quit

Код кнопки на панели ТС:
Код:

TOTALCMD#BAR#DATA
e:\Temp\KooDI.vbs
%P%N
%commander_path%\Wcmicons.dll,67
Строка в столбик

1
-1


KooDI 07-03-2013 11:18 2106048

gora, cпасибо вам огромное, за ваше время и труд

dizel-82 27-06-2013 11:49 2175167

Люди подскажите новичку, вот вы тут выкладываете какието коды, а я не знаю как ими пользоватся.Куда их вставлять. Мне вот тоже нужно разделить строки. Есть база в (блокноте),там имейл адреса идут в строку,через запятую,ну гдето строк 20 примерно,мне нужно чтобы каждый адрес был в отдельной строке,тоесть в столбик. Спасибо.

Iska 27-06-2013 13:04 2175203

dizel-82, Вам проще будет выложить этот файл, упакованный в архив, чтобы кто-нибудь сие Вам сделал.

kiripanda 27-06-2013 21:05 2175499

dizel-82
в редакторе заменить , на перевод строки не устроит?

dizel-82 28-06-2013 11:14 2175750

Да нет выслать не пойдет.Мне нужно самому это уметь делать.

kiripanda Я не понял, всмысле в редакторе заменить , на перевод строки ??

Iska 28-06-2013 11:20 2175756

Цитата:

Цитата dizel-82
всмысле в редакторе заменить , на перевод строки ?? »

Да. Поиском-заменой.

dizel-82 28-06-2013 11:24 2175760

что искать, и на что менять ??

Iska 28-06-2013 12:07 2175786

Цитата:

Цитата dizel-82
что искать, »

Запятую.

Цитата:

Цитата dizel-82
на что менять ?? »

На символ конца строки. Конкретное обозначение зависит от использованного редактора.

dizel-82 28-06-2013 13:41 2175847

А какой символ конца строки?

dizel-82 28-06-2013 13:57 2175858

а как узнать этот символ?

Iska 28-06-2013 14:39 2175880

Цитата:

Цитата dizel-82
А какой символ конца строки? »

Цитата:

Цитата Iska
Конкретное обозначение зависит от использованного редактора. »


Foreigner 28-06-2013 16:57 2175982

dizel-82, батник:
Код:

@echo off

for /f %%i in (file.txt) do (

    for %%j in (%%i) do 1>>file.tmp echo %%j

)

move file.tmp file.txt

Батник кладешь рядом с нужным файлом и запускаешь

Из powershell:
Код:

(gc file.txt) -replace ',+',"`n" | set-content file.txt

kiripanda 28-06-2013 20:02 2176063

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

Цитата dizel-82
что искать, и на что менять ?? »

а какой редактор??

Iska 28-06-2013 20:38 2176086

kiripanda, а у Вас ;)?

kiripanda 28-06-2013 20:59 2176099

EditPlus (второй скрин)
на первом – Akelpad, слышал многие пользуются

dizel-82 04-07-2013 20:42 2179478

А как сделать такую вещь ? Есть база имейл адресов в текстовом документе, и нужно из этой базы удалить допустим все адреса mail.ru , как справиться с этой задачей?

Iska 04-07-2013 20:55 2179488

dizel-82, от Вас требуется: образец текста из документа + его кодировка.

dizel-82 05-07-2013 09:26 2179667

Iska, база выглядит так

proffit1@mail.ru
leader-m@narod.ru
starmet1@nvkz.net
trubsnab@mail.ru
cmk@incompany.ru
serov@asw.ru
amet-plus@chel.surnet.ru
glad@iwm.ru
regprom@chel.surnet.ru
metall1@hotbox.ru
webmaster@globaledge.ru
pump@energoprom.spb.ru
ruslan79@bk.ru
starmet1@nvkz.kuzbass.net
molot@flexuser.ru
bublik@ebcorp.ru
trade@kameja.ru
moha@yandex.ru
karneol@dzhm.nnov.ru
durneva@partner-omsk.ru
abl@rinet.ru
danaspb@narod.ru
info@tech-impex.com
pantera100@mail.ru
marketing@metasib.com
nato@novato.ru
volga_techmet@mailru.com
met-en@mail.ru

кодировку где посмотреть не знаю,обычный txt блокнот

gora 05-07-2013 09:51 2179679

Код:

@Echo Off
Set OldFile=e:\Temp 1\list.txt
Set NewFile=e:\Temp 1\newlist.txt

(FindStr /ELIV /C:"@mail.ru" "%OldFile%")>"%NewFile%"


dizel-82 05-07-2013 10:31 2179693

Прикольно,только что с этим делать не знаю. Куда этот код вбивать?

gora 05-07-2013 11:25 2179711

Цитата:

Цитата dizel-82
что с этим делать не знаю. Куда этот код вбивать? »

1 Скопируйте код в блокнот.
2 В строке 2 укажите полный путь к Вашему списку почтовых ящиков
3 В строке 3 укажите полный путь к новому списку почтовых ящиков
4 Сохраните файл под именем MyScript.bat в любом удобном месте
5 Запустите файл MyScript.bat

Примечание:
Если пути в строках 2 и 3 содержат кириллицу, то сохранять файл (п.4) нужно в кодировке Кириллица DOS (866) и лучше это делать не в блокноте, а в более "продвинутом" редакторе..

dizel-82 05-07-2013 13:49 2179776

большое спасибо попробую. У меня установлены такие редакторы
Notepad++ , AkelPad , PSPad каким лучше?

Foreigner 05-07-2013 16:28 2179827

Цитата:

Цитата dizel-82
каким лучше? »

Хоть блокнотом. Разницы нет.

dizel-82 05-07-2013 21:03 2179957

Ничего не получается.
Цитата:

Цитата gora
4 Сохраните файл под именем MyScript.bat в любом удобном месте
5 Запустите файл MyScript.bat »

запускаю MyScript.bat и что? это-же обычный txt файл получился,он открывается и всё

Iska 05-07-2013 23:07 2180040

dizel-82, включите отображение расширений для зарегистрированных типов файлов и удалите «.txt» из «MyScript.bat.txt».

dizel-82 06-07-2013 01:08 2180113

1. в названии txt нету
2. как включить отображение расширений для зарегистрированных типов файлов ?

Iska 06-07-2013 01:33 2180124

Для Windows XP — так:
Код:

control.exe folders

dizel-82 06-07-2013 12:33 2180230

Включил отображение, убрал из названия txt , запускаю MyScript.bat выскакивает чёрное окно,и сразу же пропадает. В в файле с результатами мыл ничего не появляется.Я их поместил в корень диска С. Путь указывал такой С\1.txt и С\2.txt

О вроди бы получилось. Спасибо

Ещё вопросик. А как можна эти mail.ru адреса не удалять ,а просто сохранить в другой файл, короче отсортировать все мыла mail.ru в дрыгой документ? Спасибо заранее.

gora 06-07-2013 12:56 2180241

Цитата:

Цитата dizel-82
все мыла mail.ru в дрыгой документ? »

Код:

@Echo Off
Set OldFile=e:\Temp 1\list.txt
Set NewFile=e:\Temp 1\newlist.txt
Set mailFile=e:\Temp 1\maillist.txt

(FindStr /ELIV /C:"@mail.ru" "%OldFile%")>"%NewFile%"
(FindStr /ELI /C:"@mail.ru" "%OldFile%")>"%mailFile%"


dizel-82 06-07-2013 19:18 2180391

1.база начальная
2.останутся все кроме mail.ru
3.все мыла mail.ru

в таком порядку указывать путь к файлам? я правильно понял?

dizel-82 07-07-2013 13:24 2180647

Все мыла маил в другой документ сохранились. Огромное спасибо. А можна так чтобы и 1-я и -2я операция сразу делались?

1.исходная база
2.файл с мылами mail.ru
3.все остальные кроме mail.ru

Все разобрался, Спасибо вам огромное.
А чтобы сортировать не mail.ru а допустим gmail.com , это нужно в коде в 2-х нижних строках поменять mail.ru на gmail.com ? Правильно понял ?

dizel-82 07-07-2013 16:36 2180726

Скиньте пожалуйста код для удаления повторяющихся мыл. Делаю сейчас это в Excel , но Excel не видет больше 1 млн строк.

Iska 07-07-2013 20:29 2180841

Делайте на PowerShell:
Код:

Get-Content -Path "Путь\Duplicates.txt" | Select-Object -Unique | Set-Content -Path "Путь\Unique.txt"

dizel-82 07-07-2013 20:42 2180847

Цитата:

Цитата Iska
Делайте на PowerShell: »

что такое PowerShell ?

kiripanda 07-07-2013 21:39 2180871

ищите uniq.exe

Iska 07-07-2013 21:45 2180874

Цитата:

Цитата dizel-82
что такое PowerShell ? »

Windows PowerShell — Википедия

dizel-82 07-07-2013 22:11 2180885

Цитата:

Цитата kiripanda
ищите uniq.exe »

где искать, что это

Цитата:

Цитата Iska
Windows PowerShell — Википедия »

ну прочитал я что это,а что делать то с этим. Объясните пожалуйста доходчиво,чтобы я не вытягивал по одному слову с вас

Iska 07-07-2013 22:30 2180898

Цитата:

Цитата dizel-82
что это »

uniq — Википедия

Цитата:

Цитата dizel-82
где искать »

Можно здесь: uniq.exe for windows - Поиск в Google.

Цитата:

Цитата dizel-82
ну прочитал я что это,а что делать то с этим. »

Загрузить-установить (если у Вас Windows XP), разрешить исполнение неподписанных локальных скриптов, пользоваться.

Цитата:

Цитата dizel-82
Объясните пожалуйста доходчиво,чтобы я не вытягивал по одному слову с вас »

Что именно Вам непонятно?

dizel-82 09-07-2013 12:02 2181773

Цитата:

Цитата Iska
Загрузить-установить (если у Вас Windows XP), разрешить исполнение неподписанных локальных скриптов, пользоваться. »

Можна пожалуйста ссылку на скачивание? Где резрешить исполнение неподписанных локальных скриптов, пользоваться.? В проге которую я установлю?

Iska 09-07-2013 13:01 2181822

Цитата:

Цитата dizel-82
Можна пожалуйста ссылку на скачивание? »

Господи… У Вас ОС-то какая, Вы скажете или нет? Ну, пусть будет XP что ли… Загрузка Windows PowerShell 2.0.

Цитата:

Цитата dizel-82
Где резрешить исполнение неподписанных локальных скриптов »

Using the Set-ExecutionPolicy Cmdlet - TechNet - Microsoft

Цитата:

Цитата dizel-82
пользоваться.? »

В меню: \Пуск\Все программы\Стандартные\Windows PowerShell\…. Там ярлыки на саму оболочку и на интегрированную среду разработки.

Ответы на прочие вопросы ищите здесь: Создание сценариев Windows PowerShell.

dizel-82 09-07-2013 13:20 2181837

да ХР

dizel-82 09-07-2013 23:05 2182145

Это чето сложное для меня. Что нельзя никак подругому удалять дубликаты?

Iozeg 06-08-2013 11:56 2197124

Всем доброго времени суток!
Помогите, пожалуйста, с написанием скрипта. Желательно с запуском попроще (bat, cmd) :)

Исходные данные:
Есть каталог с множеством txt файлов (>1000). Каждый файл называется уникальным именем. Внутри каждого файла в строку записано ровно 4 числа через пробел: 450 32 560 8

Необходимо:
Создать в этом же каталоге или в подкаталоге txt файлы с именами оригинальных файлов, однако числа из строки для каждого файла преобразовать в столбик без дополнительных символов:
450
32
560
8

Заранее огромное спасибо за помощь!

Sphinx114 06-08-2013 15:39 2197259

Iozeg
Код:

@echo off
md newfiles
for %%i in (*.txt) do (
for /f "tokens=1-4" %%a in ('type "%%i"') do (
echo %%a
echo %%b
echo %%c
echo %%d
)>"newfiles\%%~nxi"
)


Iozeg 06-08-2013 23:26 2197586

Цитата:

Цитата Sphinx114
Iozeg
Код:
@echo off
md newfiles
for %%i in (*.txt) do (
for /f "tokens=1-4" %%a in ('type "%%i"') do (
echo %%a
echo %%b
echo %%c
echo %%d
)>"newfiles\%%~nxi"
) »

Спасибо огромное! Работает идеально, то что надо :)


Время: 18:58.

Время: 18:58.
© OSzone.net 2001-