Показать полную графическую версию : [решено] Упорядочивание чисел в строках файла txt
Belial4444
22-07-2013, 11:52
Здравствуйте уважаемые форумчане! Возникла у меня задача - быстро перебрать несколько тысяч строк в текстовом файле, в каждой строке указаны числа через запятую с пробелом, нужно чтобы в каждой строке были в порядке возрастания, а они вразброс находятся. Например:
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, но это было давно да и думаю с обычным программированием мало в этом общего)
Здесь, как никогда, хорош будет 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
Iska, спасибо Вам огромное все отлично работает!)) Хотелось бы еще узнать можно ли как то по простому организовать поиск одинаковых строк в файле текстовом и одинаковые выводить в другой файл, я искал и натолкнулся что в линуксе это делается так: sort file.1 | uniq -d > file.2
Есть ли что-нибудь подобное для винды?)
Есть ли что-нибудь подобное для винды?) »
Нет.
и одинаковые выводить в другой файл, »
Зачем Вам выводить одинаковые?
Обычно ищут напротив — уникальные:
$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
Iska, мне наоборот нужно повторы выявить среди этих строк, а точнее одинаковые числа, для этого и упорядочил по порядку их, чтобы можно было найти повторяющиеся строки соответственно повторяющиеся числовые комбинации, если бы числа были написаны вразброс комбинации некоторые могли бы уйти из виду.
Belial4444, в каком виде Вам надо? Просто перечислить по одному разу повторяющиеся строки? Или сколько раз повторов — столько раз и выводить повторяющуюся строку?
Т.е., из:
1
2
3
2
2
3
4
5
Вам нужно получить:
2
3
или же:
2
3
2
2
3?
Belial4444
22-07-2013, 17:16
Iska, мне просто столбиком вывести в файл повторяющуюся комбинацию, например
12345
101112131415
6789
12345
765432
76543212345
765432Ну только, чтобы так же были цифры через запятую с пробелом)
То бишь — однократно. Ну, вот как-то так:
$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
Как вариант. Перезаписывает исходный файл 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
Iska, Foreigner, то что нужно все как надо работает) Спасибо Вам большое, помогли очень сильно) У меня больше вопросов пока нету)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.