2012-02-01 3 views
0

У меня есть текстовый файл со следующим содержимым (содержимое переменной до> 10 МБ) Я хочу установить/заменить количество копий на динамическое число и. Я использовал sed utiliy, чтобы сделать то же самое, но он будет показывать подсказку. Есть ли способ использовать C#/регулярное выражение?замена номера в определенной точке текстового файла

Как написать измененные шаблоны обратно в файл?

%[email protected] JOB NAME = "Microsoft Word -Values.docx" 
@PJL OKIAUXJOBINFO DATA="ComputerName=USER-PC" 
@PJL OKIAUXJOBINFO DATA="UserName=user" 
@PJL OKIAUXJOBINFO DATA="PortName=PORTCUSTOM" 
@PJL OKIAUXJOBINFO DATA="ReceptionTime=22:04:09 2012/02/01" 
@PJL OKIAUXJOBINFO DATA="DocumentName=Microsoft Word - LDAPValues.docx" 
@PJL OKIAUXJOBINFO DATA="MultiPage=1" 
@PJL OKIAUXJOBINFO DATA="ApplicationName=Microsoft Office Word" 
@PJL OKIJOBACCOUNTJOB JOBACCOUNTID=0 USERID="user" JOBNAME="Microsoft Word - Values.docx" 
@PJL RDYMSG DISPLAY = "" 
@PJL COMMENT OS Version : Windows NT 6.1 Build 7600 
@PJL COMMENT Product Name : OKI PCL5c Printer Driver 
@PJL COMMENT Device Name : OKI 
@PJL COMMENT Version  : 1.0.5 
@PJL COMMENT Build Date : 2010/03/30 (Tue) 16:17:01 
@PJL SET OKIPAPERSIZECHECK=ENABLE 
@PJL SET OKICUPAPERSIZECHECK=ENABLE 
@PJL SET MANUALFEED=OFF 
@PJL SET OKIXDIMENSIONMILLIMETER=216 
@PJL SET OKIYDIMENSIONMILLIMETER=280 
@PJL SET MEDIASRCMANUAL=2 
@PJL SET MEDIASRCINTRAY1=4 
@PJL SET MEDIASRCINTRAY2=1 
@PJL SET MEDIASRCINTRAY3=5 
@PJL SET MEDIASRCINTRAY4=6 
@PJL SET MEDIASRCINTRAY5=20 
@PJL SET MEDIASRCINTRAY6=21 
@PJL SET MEDIASRCINTRAY7=22 
@PJL SET QTY=1 
@PJL SET COPIES=2 
@PJL SET OKIRESOLUTION=X600Y600LEVEL2 

ответ

1

Похоже

Regex.Replace(
    input, 
    @"COPIES=\d+", 
    string.Format("COPIES={0}", number), 
    RegexOptions.Multiline); 

будет делать трюк.

http://msdn.microsoft.com/en-us/library/taz3ak2f.aspx

Записав его обратно в файл будет выглядеть примерно так:

string input = File.ReadAllText("filename.txt"); 
string output = Regex.Replace(
    input, 
    @"COPIES=\d+", 
    string.Format("COPIES={0}", number), 
    RegexOptions.Multiline); 
File.WriteAllText("filename.txt", output); 
3

Это находит номер после "@PJL SET COPIES="

(?<[email protected]\ SET\ COPIES=)\d+ 

Используйте его, как это

Regex.Replace(text, @"(?<[email protected]\ SET\ COPIES=)\d+", newCount.ToString()); 

Я использовал шаблон lookaround Regex

(?<=prefix)find 
Смежные вопросы