Показать полную графическую версию : Добавить текст до или после символа
Нужны два скрипта, первый должен добавлять указанный текст до определённого символа (напимер "@" или ":"), а второй после этого символа в каждой строке.
Таких символов в строке может быть несколько. Это нужно делать после первого символа в строке, который попадётся
Serguei Kouzmine
13-02-2023, 16:59
покажите, как вы пробовали решить проблему
покажите, как вы пробовали решить проблему »
До:
$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()
После:
$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()
Не доделал, не знаю как
Не доделал, не знаю как »
Мда... уж... я конечно патент на буквы алфавита не получал...
Но Вы уверены, что это (http://forum.oszone.net/post-3000190.html#post3000190) именно Вы делали? :)
Совсем некрасиво выглядит...
Совсем некрасиво выглядит... »
-покажите, как вы пробовали решить проблему
-показал
Serguei Kouzmine
13-02-2023, 21:58
повершеллом владеете ?
-покажите, как вы пробовали решить проблему
-показал »
Как бы это сказать поточнее...
Нет ничего плохого в том, чтобы использовать чужой опыт и учиться у других, это нормально и даже естественно, т.к. изобретение велосипедов - из области чудачеств, мягко говоря, а со временем придут и свои собственные опыт и знания. Зазорно выдавать за свои усилия чужие знания и чужой труд... правильнее было сказать, что знаний не хватает, а подсказки не помогли. За это никто не осудит и даже более того, помогут... и чем точнее будет составлен вопрос, тем полнее будет ответ.
Вы создаёте много топиков с однотипными вопросами... и видимо, не получаете верное решение, т.к. неточно описываете проблему. В данном случае, надо работать не над количеством, а над содержанием, т.е. опишите проблему наиболее полно и точно, тогда получите то, что требуется.
Как бы это сказать поточнее...
Нет ничего плохого в том, чтобы использовать чужой опыт и учиться у других, это нормально и даже естественно, т.к. изобретение велосипедов - из области чудачеств, мягко говоря, а со временем придут и свои собственные опыт и знания. Зазорно выдавать за свои усилия чужие знания и чужой труд... правильнее было сказать, что знаний не хватает, а подсказки не помогли. За это никто не осудит и даже более того, помогут... и чем точнее будет составлен вопрос, тем полнее будет ответ.
Вы создаёте много топиков с однотипными вопросами... и видимо, не получаете верное решение, т.к. неточно описываете проблему. В данном случае, надо работать не над количеством, а над содержанием, т.е. опишите проблему наиболее полно и точно, тогда получите то, что требуется. »
Я не выдавал ничего за своё. То, что я не указал ссылку на пост - не значит, что я написал: "это мой код"
Вы могли написать: "Мой код универсальный, достаточно пару символов сменить и закинуть в новый ответ", а не писать, что я что-то своровал...
DJ Mogarych
14-02-2023, 09:10
не получаете верное решение, т.к. неточно описываете проблему »
Я бы даже сказал так: вместо проблемы описывается не она сама, а концепция её решения.
То, что я не указал ссылку на пост - не значит, что я написал: "это мой код" »
Не хочу вдаваться в подробности юридической казуистики, но выражение "не доделал" подразумевает, что делал самостоятельно, а не изменил названия двух переменных, не изменив даже форматирования...
Вы могли написать: "Мой код универсальный »
Универсальный код написать очень сложно, если вообще возможно... лично я придерживаюсь мнения, что это попросту невозможно.
а не писать, что я что-то своровал... »
Я не писал, что Вы что-то своровали, это несколько другое... в том коде нет ничего проприетарного и секретного (а если бы было, то вряд ли, я стал бы его выкладывать на общедоступный форум), его мог написать любой человек, понимающий как он работает. Ещё раз повторюсь: нет ничего зазорного в том, чтобы использовать чужой опыт, знания и т.д., человек так и учится, читая код более опытных программистов, рекомендации разработчиков и т.п., применяя в собственном коде приемы которые он сумел увидеть в чужом коде... но код тот, необходимо применять вдумчиво, понимая, что там написано и как именно использовано, а не просто скопировать и изменить имена переменных (это ничего не изменит в самом коде и вряд ли даст понимание принципов его работы).
вместо проблемы описывается не она сама, а концепция её решения. »
Да-да, именно это и пытаюсь сказать, что задачи самой и не видно в целом, только отдельные элементы попыток её реализации (и не факт, что сам принцип реализации оптимален).
повершеллом владеете ? »
Ничем не владею, могу только скопировать ваш код и вставить
нет ничего зазорного в том, чтобы использовать чужой опыт »
Мне не зазорно, я это не скрываю, что я использовал ваш код. Я не знал, что вас это так сильно заденет. Извините, пожалуйста, что я не указал ссылку на ваш комментарий. Так что мне там вместо "???" надо написать, чтобы в каждой строке до символа "@" (а в другом варианте после символа "@") добавлялся текст, который я укажу
Ничем не владею, могу только скопировать ваш код и вставить »
В этом случае, лучше прислушаться к тому, что говорю не я один, т.е. описать задачу в целом, а не пытаться решить её отдельными способами.
Так что мне там вместо "???" надо написать, чтобы в каждой строке до символа "@" (а в другом варианте после символа "@") добавлялся текст, который я укажу »
Т.е. показать всю задачу желания нет? :)
Ок. Вот решение, 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))
Ок. Вот решение, powershell: »
Вы тут все на меня наругались, что я разобрался и в BAT и в PowerShell :)
Я сделал пару своих вариантов, но они и рядом с твоим не стояли. Могу скинуть, если интересно.
Serguei Kouzmine
15-02-2023, 03:58
очень интересно
очень интересно »
$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%
Я сделал пару своих вариантов, но они и рядом с твоим не стояли. »
Свои варианты всегда лучше, чем какие-либо другие, даже если они менее оптимальные чем чужие, в плане развития навыков...
Могу скинуть, если интересно. »
Показывайте, конечно - подскажем, где и что поправить, если есть ошибки...
$_ -replace "@", "asd@" »
$_ -split "@" »
Да, можно и так, но с условием, что опорный символ в строке один... если их несколько, то действия будут производиться с каждым. Причем вариант со -split, поломает строки, если опорных символов больше чем один...
в cmd варианте тоже будут проблемы со строками, в которых разделителей нет. В них будет добавляться текст с опорным символом в конец строки...
Serguei Kouzmine
16-02-2023, 06:33
а как же
Таких символов в строке может быть несколько. Это нужно делать после первого символа в строке, который попадётся ?
ведь жадное
' a a a ' -replace 'a', 'b'
b b b
DJ Mogarych
16-02-2023, 08:59
Пора обязать авторов тем в этом разделе добавлять примеры. Так надоело уже - задают вопрос, а предмета не предоставляют.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.