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

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

Belial4444 22-07-2013 11:52 2188539

Упорядочивание чисел в строках файла txt
 
Здравствуйте уважаемые форумчане! Возникла у меня задача - быстро перебрать несколько тысяч строк в текстовом файле, в каждой строке указаны числа через запятую с пробелом, нужно чтобы в каждой строке были в порядке возрастания, а они вразброс находятся. Например:
15, 1 ,48, 32, 56
37, 12, 4, 68, 49
После обработки чтобы было
1, 15, 32, 48, 56
4, 12, 37, 49, 68
Будут ли строки переписаны в этом же файле или создастся новый с упорядоченными числами в строках неважно, наверное второй вариант проще)
Возможно ли это реализовать с помощью bat/cmd, если да то как? Очень надеюсь на вашу помощь потому что я в программировании почти не понимаю, программировал только установщики inno setup и nsis, но это было давно да и думаю с обычным программированием мало в этом общего)

Iska 22-07-2013 12:22 2188563

Здесь, как никогда, хорош будет PowerShell:
Код:

$sSourceFile = "C:\Песочница\022\0001.txt"
$sDestFile  = "C:\Песочница\022\0002.txt"

if(Test-Path -Path $sSourceFile) {
    Get-Content -Path $sSourceFile |`
        ForEach-Object -Process {
            ($_.Split(",") |`
                ForEach-Object -Process {
                    [System.Int32]$_.Trim()
                } | Sort-Object) -join ", "
        } | Set-Content -Path $sDestFile
} else {
    Write-Host -ForegroundColor Red "Can't find source file [$sSourceFile]"
}


Belial4444 22-07-2013 14:08 2188620

Iska, спасибо Вам огромное все отлично работает!)) Хотелось бы еще узнать можно ли как то по простому организовать поиск одинаковых строк в файле текстовом и одинаковые выводить в другой файл, я искал и натолкнулся что в линуксе это делается так: sort file.1 | uniq -d > file.2
Есть ли что-нибудь подобное для винды?)

Iska 22-07-2013 14:42 2188640

Цитата:

Цитата Belial4444
Есть ли что-нибудь подобное для винды?) »

Нет.

Цитата:

Цитата Belial4444
и одинаковые выводить в другой файл, »

Зачем Вам выводить одинаковые?

Обычно ищут напротив — уникальные:
Код:

$sSourceFile = "C:\Песочница\022\0003.txt"
$sDestFile  = "C:\Песочница\022\0004.txt"

if(Test-Path -Path $sSourceFile) {
    Get-Content -Path $sSourceFile | Select-Object -Unique | Set-Content -Path $sDestFile
} else {
    Write-Host -ForegroundColor Red "Can't find source file [$sSourceFile]"
}


Belial4444 22-07-2013 16:57 2188701

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

Iska 22-07-2013 17:03 2188705

Belial4444, в каком виде Вам надо? Просто перечислить по одному разу повторяющиеся строки? Или сколько раз повторов — столько раз и выводить повторяющуюся строку?

Т.е., из:
Код:

1
2
3
2
2
3
4
5

Вам нужно получить:
Код:

2
3

или же:
Код:

2
3
2
2
3

?

Belial4444 22-07-2013 17:16 2188712

Iska, мне просто столбиком вывести в файл повторяющуюся комбинацию, например
Код:

12345
101112131415
6789
12345
765432
765432

Код:

12345
765432

Ну только, чтобы так же были цифры через запятую с пробелом)

Iska 22-07-2013 17:34 2188718

То бишь — однократно. Ну, вот как-то так:
Код:

$sSourceFile = "C:\Песочница\022\0005.txt"
$sDestFile  = "C:\Песочница\022\0006.txt"

if(Test-Path -Path $sSourceFile) {
    Compare-Object -ReferenceObject (Get-Content -Path $sSourceFile) -DifferenceObject (Get-Content -Path $sSourceFile | Select-Object -Unique) -PassThru | `
        Set-Content -Path $sDestFile
} else {
    Write-Host -ForegroundColor Red "Can't find source file [$sSourceFile]"
}


Foreigner 22-07-2013 20:40 2188807

Как вариант. Перезаписывает исходный файл 1.txt ( с "uniq -d" )
Код:

$a = gc 1.txt | select -unique

(compare (gc 1.txt) $a).inputobject | % {

    ((( $_ -replace '\s','' -split ',' ) | % { [int] $_ } ) | sort ) -join ', '
   
} | sc 1.txt


Belial4444 22-07-2013 21:21 2188827

Iska, Foreigner, то что нужно все как надо работает) Спасибо Вам большое, помогли очень сильно) У меня больше вопросов пока нету)


Время: 00:44.

Время: 00:44.
© OSzone.net 2001-