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

Asdshka 12-02-2023 20:49 3003013

Добавить текст до или после символа
 
Нужны два скрипта, первый должен добавлять указанный текст до определённого символа (напимер "@" или ":"), а второй после этого символа в каждой строке.
Таких символов в строке может быть несколько. Это нужно делать после первого символа в строке, который попадётся

Serguei Kouzmine 13-02-2023 16:59 3003069

покажите, как вы пробовали решить проблему

Asdshka 13-02-2023 18:06 3003080

Цитата:

Цитата Serguei Kouzmine
покажите, как вы пробовали решить проблему »

До:
PHP код:

$file 'input.txt'
$res 'out.txt'
$n 2
$pattern 
"^.+(?=@)"
$reader = [io.streamreader]::new($file)
$writer = [io.streamwriter]::new($res)
while (
$reader.peek() -ne -1
{
    
$writer.writeline($reader.readline() ???)
}
$reader.dispose();$reader.close()
$writer.dispose();$writer.close() 

После:
PHP код:

$file 'input.txt'
$res 'out.txt'
$n 2
$pattern 
"(?<=@).+$"
$reader = [io.streamreader]::new($file)
$writer = [io.streamwriter]::new($res)
while (
$reader.peek() -ne -1
{
    
$writer.writeline($reader.readline() ???)
}
$reader.dispose();$reader.close()
$writer.dispose();$writer.close() 

Не доделал, не знаю как

YuS_2 13-02-2023 19:08 3003089

Цитата:

Цитата Asdshka
Не доделал, не знаю как »

Мда... уж... я конечно патент на буквы алфавита не получал...
Но Вы уверены, что это именно Вы делали? :)
Совсем некрасиво выглядит...

Asdshka 13-02-2023 20:12 3003094

Цитата:

Цитата YuS_2
Совсем некрасиво выглядит... »

-покажите, как вы пробовали решить проблему
-показал

Serguei Kouzmine 13-02-2023 21:58 3003105

повершеллом владеете ?

YuS_2 14-02-2023 07:48 3003114

Цитата:

Цитата Asdshka
-покажите, как вы пробовали решить проблему
-показал »

Как бы это сказать поточнее...
Нет ничего плохого в том, чтобы использовать чужой опыт и учиться у других, это нормально и даже естественно, т.к. изобретение велосипедов - из области чудачеств, мягко говоря, а со временем придут и свои собственные опыт и знания. Зазорно выдавать за свои усилия чужие знания и чужой труд... правильнее было сказать, что знаний не хватает, а подсказки не помогли. За это никто не осудит и даже более того, помогут... и чем точнее будет составлен вопрос, тем полнее будет ответ.
Вы создаёте много топиков с однотипными вопросами... и видимо, не получаете верное решение, т.к. неточно описываете проблему. В данном случае, надо работать не над количеством, а над содержанием, т.е. опишите проблему наиболее полно и точно, тогда получите то, что требуется.

Asdshka 14-02-2023 09:03 3003118

Цитата:

Цитата YuS_2
Как бы это сказать поточнее...
Нет ничего плохого в том, чтобы использовать чужой опыт и учиться у других, это нормально и даже естественно, т.к. изобретение велосипедов - из области чудачеств, мягко говоря, а со временем придут и свои собственные опыт и знания. Зазорно выдавать за свои усилия чужие знания и чужой труд... правильнее было сказать, что знаний не хватает, а подсказки не помогли. За это никто не осудит и даже более того, помогут... и чем точнее будет составлен вопрос, тем полнее будет ответ.
Вы создаёте много топиков с однотипными вопросами... и видимо, не получаете верное решение, т.к. неточно описываете проблему. В данном случае, надо работать не над количеством, а над содержанием, т.е. опишите проблему наиболее полно и точно, тогда получите то, что требуется. »

Я не выдавал ничего за своё. То, что я не указал ссылку на пост - не значит, что я написал: "это мой код"
Вы могли написать: "Мой код универсальный, достаточно пару символов сменить и закинуть в новый ответ", а не писать, что я что-то своровал...

DJ Mogarych 14-02-2023 09:10 3003120

Цитата:

Цитата YuS_2
не получаете верное решение, т.к. неточно описываете проблему »

Я бы даже сказал так: вместо проблемы описывается не она сама, а концепция её решения.

YuS_2 14-02-2023 09:56 3003122

Цитата:

Цитата Asdshka
То, что я не указал ссылку на пост - не значит, что я написал: "это мой код" »

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

Цитата Asdshka
Вы могли написать: "Мой код универсальный »

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

Цитата Asdshka
а не писать, что я что-то своровал... »

Я не писал, что Вы что-то своровали, это несколько другое... в том коде нет ничего проприетарного и секретного (а если бы было, то вряд ли, я стал бы его выкладывать на общедоступный форум), его мог написать любой человек, понимающий как он работает. Ещё раз повторюсь: нет ничего зазорного в том, чтобы использовать чужой опыт, знания и т.д., человек так и учится, читая код более опытных программистов, рекомендации разработчиков и т.п., применяя в собственном коде приемы которые он сумел увидеть в чужом коде... но код тот, необходимо применять вдумчиво, понимая, что там написано и как именно использовано, а не просто скопировать и изменить имена переменных (это ничего не изменит в самом коде и вряд ли даст понимание принципов его работы).

Цитата:

Цитата DJ Mogarych
вместо проблемы описывается не она сама, а концепция её решения. »

Да-да, именно это и пытаюсь сказать, что задачи самой и не видно в целом, только отдельные элементы попыток её реализации (и не факт, что сам принцип реализации оптимален).

Asdshka 14-02-2023 10:27 3003125

Цитата:

Цитата Serguei Kouzmine
повершеллом владеете ? »

Ничем не владею, могу только скопировать ваш код и вставить

Цитата:

Цитата YuS_2
нет ничего зазорного в том, чтобы использовать чужой опыт »

Мне не зазорно, я это не скрываю, что я использовал ваш код. Я не знал, что вас это так сильно заденет. Извините, пожалуйста, что я не указал ссылку на ваш комментарий. Так что мне там вместо "???" надо написать, чтобы в каждой строке до символа "@" (а в другом варианте после символа "@") добавлялся текст, который я укажу

YuS_2 14-02-2023 12:33 3003145

Цитата:

Цитата Asdshka
Ничем не владею, могу только скопировать ваш код и вставить »

В этом случае, лучше прислушаться к тому, что говорю не я один, т.е. описать задачу в целом, а не пытаться решить её отдельными способами.
Цитата:

Цитата Asdshka
Так что мне там вместо "???" надо написать, чтобы в каждой строке до символа "@" (а в другом варианте после символа "@") добавлялся текст, который я укажу »

Т.е. показать всю задачу желания нет? :)
Ок. Вот решение, powershell:
Код:

$fin = 'test.txt'
$fout = 'out.txt'
[char]$p = "@"
$insert = 'добаляемый текст'

$reader = [io.streamreader]::new($fin)
$writer = [io.streamwriter]::new($fout)
while ($reader.peek() -ne -1) {
        $str = $reader.readline()
        $ind = $str.indexof($p)
        if ($ind -ge 0){
                # Текст добавляется ПОСЛЕ первого символа:
                #$writer.writeline($str.insert($ind+1,$insert))
                # Текст добавляется ДО первого символа:
                $writer.writeline($str.insert($ind,$insert))
        } else {$writer.writeline($str)}
}
$reader.dispose();$reader.close()
$writer.dispose();$writer.close()

Символ комментария в строках: "#"
Чтобы текст вставлялся после указанного символа, необходимо закомментировать строку:
Код:

$writer.writeline($str.insert($ind,$insert))
и раскомментировать строку:
Код:

$writer.writeline($str.insert($ind+1,$insert))

Asdshka 14-02-2023 22:07 3003214

Цитата:

Цитата YuS_2
Ок. Вот решение, powershell: »

Вы тут все на меня наругались, что я разобрался и в BAT и в PowerShell :)
Я сделал пару своих вариантов, но они и рядом с твоим не стояли. Могу скинуть, если интересно.

Serguei Kouzmine 15-02-2023 03:58 3003217

очень интересно

Asdshka 15-02-2023 07:49 3003221

Цитата:

Цитата Serguei Kouzmine
очень интересно »

Код:

$inputFile = "C:\path\input.txt"
$outputFile = "C:\path\output.txt"

(Get-Content $inputFile) | ForEach-Object {$_ -replace "@", "asd@"} | Set-Content $outputFile



$input_file = "C:\path\input.txt"
$output_file = "C:\path\output.txt"

Get-Content $input_file | ForEach-Object {
    $parts = $_ -split "@"
    $newLine = $parts[0] + "asd@" + $parts[1]
    $newLine | Add-Content $output_file
}



$inputFile = 'C:\path\input.txt'
$outputFile = 'C:\path\output.txt'

Get-Content $inputFile | ForEach-Object {
    $line = $_
    $pos = $line.IndexOf('@')
    if ($pos -ge 0) {
        $line = $line.Insert($pos + 1, 'asd')
    }
    $line
} | Set-Content $outputFile

Код:

@echo off
setlocal enabledelayedexpansion

set input_file=input.txt
set output_file=output.txt

(for /f "tokens=1,* delims=@" %%a in (%input_file%) do (echo %%aasd@%%b)) > %output_file%


YuS_2 15-02-2023 08:01 3003222

Цитата:

Цитата Asdshka
Я сделал пару своих вариантов, но они и рядом с твоим не стояли. »

Свои варианты всегда лучше, чем какие-либо другие, даже если они менее оптимальные чем чужие, в плане развития навыков...

Цитата:

Цитата Asdshka
Могу скинуть, если интересно. »

Показывайте, конечно - подскажем, где и что поправить, если есть ошибки...

YuS_2 15-02-2023 09:09 3003228

Цитата:

Цитата Asdshka
$_ -replace "@", "asd@" »

Цитата:

Цитата Asdshka
$_ -split "@" »

Да, можно и так, но с условием, что опорный символ в строке один... если их несколько, то действия будут производиться с каждым. Причем вариант со -split, поломает строки, если опорных символов больше чем один...

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

Serguei Kouzmine 16-02-2023 06:33 3003318

а как же

Таких символов в строке может быть несколько. Это нужно делать после первого символа в строке, который попадётся ?
ведь жадное

Код:

' a a a ' -replace 'a', 'b'
 b b b


DJ Mogarych 16-02-2023 08:59 3003322

Пора обязать авторов тем в этом разделе добавлять примеры. Так надоело уже - задают вопрос, а предмета не предоставляют.


Время: 06:30.

Время: 06:30.
© OSzone.net 2001-