Получение определенного значения из текстового файла не работает
У меня есть файл zpllabel.txt, который я читаю в память, но я хочу получить все значения ^FO из текстового файла и добавить к нему значение, которое пользователь вводит для смещения принтера.
^XA^MCY^PRD,D,D^MMT,N^XZ
^XA
^DFCASENEW^FS
^LH0,0
^FO33,45^A0N,90,98^FN01^FS^FX Company^FS
^FO879,28^A0N,263,214^FN02^FS^FX Product^FS
^FO30,159^A0N,90,58^FN03^FS^FX Description^FS
^FO42,321^A0N,65,68^FN04^FS^FX NumberIn^FS
^FO100,436^A0N,75,66^FN05^FS^FX SelectCode^FS
^BY6,,230^FO260,252^BCN,,N,N,N,N^FN06^FS^FX RotationProduct^FS
^FO660,503^A0N,32,98^FN07^FS^FX RotationProduct^FS
^BY4,3.0,204^FO60,518^B2N,,N,N,N^FN08^FS^FX UPCCode^FS
^FO170,732^A0N,24,47^FN09^FS^FX UPCCode^FS
^FO32,516^GB590,0,10^FS
^FO32,717^GB590,0,10^FS
^FO640,573^A0N,226,212^FN10^FS^FX Rotation^FS
^FO1362,546^A0N,90,66^FDBest Before^FS
^FO1235,628^A0N,134,140^FN11^FS^FX BestBefore^FS
^FO55,391^A0N,43,77^FDSEL^FS
^FO30,267^A0N,54,100^FDQTY^FS
^XZ
^XA^XFCASENEW
^FN01^FDCompany^FS
^FN02^FDProduct^FS
^FN03^FDDescription^FS
^FN04^FDNumberIn^FS
^FN05^FDSelectCode^FS
^FN06^FDRotationProduct^FS
^FN07^FD^FS
^FN08^FDUPCCode^FS
^FN09^FD^FS
^FN10^FDRotation^FS
^FN11^FDBestBefore^FS
^PQ1,0,1,Y
^XZ
^XA^ID*.*^XZ
так, например, 5-я строка метки должна быть FO43, если пользователь вводит значение смещения 10 и должно быть 23, если он вводит -10 в качестве значения смещения, я новичок в обработке текстовых файлов в C#, пожалуйста, помогите
У меня есть этот код, который заменяет пару текста:
try
{
byte[] file = File.ReadAllBytes("C:\\Users\\something\\Documents\\Visual Studio 2013\\Projects\\zplTest\\zplTest\\zpllabel3.txt");
using (MemoryStream memory = new MemoryStream(file))
{
using (TextReader reader = new StreamReader(memory))
{
string input = reader.ReadToEnd();
// for (int i = 0; 1 < file.Length; i++)
{
using (MemoryStream writermemory = new MemoryStream())
using (StreamWriter writer = new StreamWriter(writermemory))
{
Dictionary<string, string> replacementcollections =
new Dictionary<string, string>();
replacementcollections.Add
("^FN01^FDCompany^FS", compname);
replacementcollections.Add
("^FN02^FDProduct^FS", stlabel23);
replacementcollections.Add
("^FN03^FDDescription^FS", stlabel24);
replacementcollections.Add
("^FN04^FDNumberIn^FS", stlabel25);
replacementcollections.Add
("^FN05^FDSelectCode^FS", stlabel26);
replacementcollections.Add
("^FN06^FDRotationProduct^FS", stlabel27);
replacementcollections.Add
("^FN07^FD^FS", stlabel28);
replacementcollections.Add
("^FN08^FDUPCCode^FS", stlabel29.TrimEnd());
replacementcollections.Add
("^FN09^FD^FS", stlabel30.TrimEnd());
replacementcollections.Add
("^FN10^FDRotation^FS", "^FN10^FD" + TxtRotcode.Text.Trim() + "^FS");
replacementcollections.Add
("^FN11^FDBestBefore^FS", "^FN11^FD" + TxtBestBefore.Text.Trim() + "^FS");
replacementcollections.Add
("^PQ1,0,1,Y", "PQ" + TxtQty.Text.Trim() + ",0,1,Y");
string output = input;
foreach (KeyValuePair<string, string>
replacement in replacementcollections)
{ output = output.Replace(replacement.Key, replacement.Value); }
Label256.Visible = true;
zplcode.Text = output;
zplcode.Visible = true;
writer.Close();
ZplPreview();
}
}
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.StackTrace.ToString());
Console.WriteLine(ex.Message.ToString());
}
так что я хотел бы выполнить 1) прочитать текстовый файл в память 2) найти все значения "FO" 3) сложить или вычесть это значение из того, что вводит пользователь 4) отправить его в текстовое поле 5) позже я отправлю этот текст к принтеру зебры
Я старался:
using
(TextReader reader = new StreamReader(memory))
{
int offset = Convert.ToInt32(txtOffSet.Text);
string inputs = reader.ReadToEnd();
Regex r = new Regex("\\^FO([0-9]*)", RegexOptions.Singleline);
string res = r.Replace(Convert.ToString(reader), (input) => "^FO" + (int.Parse(input.Groups[1].Value) + offset).ToString());
// for (int i = 0; 1 < file.Length; i++)
{
1 ответ
Хорошо, ваш вопрос действительно расплывчатый, и ваш код не имеет ничего общего с тем, что вы просили, но это может помочь вам при замене, которую вы запросили.
string fileContent = File.ReadAllText("path/to/your/file");
int offset = 10; //Store here your offset, positive to add it, negative to subtract it
Regex r = new Regex("\\^FO([0-9]*)", RegexOptions.Singleline);
string res = r.Replace(fileContent, (input) => "^FO" + (int.Parse(input.Groups[1].Value) + offset).ToString());
//Now you have the content of the file with the FO replaced with it's new values
Debug.Write(res);