Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno C# Odmazávání části CNC kódu

Zdravím potřebuji poradit. Tvořím program v C# na odmazávání
části CNC kódu. Konkrétně potřebuji odmazávat CNC kód
od místa které označím kurzorem po nejbližší výskyt středníku (;).
Příklad CNC kódu před odmazáním.
BEGIN PGM TEST MM
1 ; Tento řádek zůstává
2 ; Tento řádek zůstává
3 BLK FORM 0.1 Z X+0.000 Y-500.000 Z-42.000
4 BLK FORM 0.2 X+500.000 Y+0.000 Z+0.000
5 TOOL CALL 1 Z S2000
6 L X+142.093 Y-142.093 R0 FMAX M3
7 L Z+16.000 FMAX
8 L Z+0.490 FMAX
9 ; Test 01
10 CC X+140.696 Y-140.696
11 CP IPA+45.000 IZ-0.044 DR+ F3000

Příklad CNC kódu po odmazání. Kurzor umístěn na začátek řádku 6.
BEGIN PGM TEST MM
1 ; Tento řádek zůstává
2 ; Tento řádek zůstává
3 BLK FORM 0.1 Z X+0.000 Y-500.000 Z-42.000
4 BLK FORM 0.2 X+500.000 Y+0.000 Z+0.000
5 TOOL CALL 1 Z S2000
9 ; Test 01
10 CC X+140.696 Y-140.696
11 CP IPA+45.000 IZ-0.044 DR+ F3000

Přikládám testovací projekt v C#.

V reálu má CNC kód i 60000 řádků tak se to v WordPadu
a podobných programech špatně odmazává.

Předmět Autor Datum
Vždyť už tam v podstatě všechno máš: Najdeš si, kde je středník - richTextBox1.Find(). Najdeš si, kd…
Wikan 03.01.2021 13:49
Wikan
Mohl bys ten kód napsat jak má být přesně? Ať to zkouším jak chci tak se mi to zasekne na těch první…
Spelec 03.01.2021 14:04
Spelec
No to tomu taky musíš říct, aby to hledal až od současné pozice: richTextBox1.Find(new[] { ';' }, s…
Wikan 03.01.2021 14:09
Wikan
richTextBox1.Text.IndexOf(';', start); Nevím jak to použít pořád mi to končí u prvního středníku.
Spelec 03.01.2021 14:30
Spelec
if (cbOdmazatPo.Text == ";") { DeleteToChar(selectionStart, ';'); } ... void DeleteToChar(int select…
Wikan 03.01.2021 14:39
Wikan
Funguje paráda dík! poslední
Spelec 03.01.2021 14:43
Spelec

Vždyť už tam v podstatě všechno máš:
Najdeš si, kde je středník - richTextBox1.Find().
Najdeš si, kde začíná řádek s tím středníkem - richTextBox1.GetLineFromCharIndex() a richTextBox1.GetFirstCharIndexFromLine().
Smažeš text mezi současnou polohou a začátkem řádku se středníkem - richTextBox1.Text.Remove().

if (cbOdmazatPo.Text == ";")
{
    DeleteToChar(selectionStart, ';');
}

...

void DeleteToChar(int selectionStart, char chr)
{
    var lineIndex = richTextBox1.GetLineFromCharIndex(selectionStart);
    var start = richTextBox1.GetFirstCharIndexFromLine(lineIndex);
    var charIndex = richTextBox1.Text.IndexOf(chr, start);
    lineIndex = richTextBox1.GetLineFromCharIndex(charIndex);
    var end = richTextBox1.GetFirstCharIndexFromLine(lineIndex);
    richTextBox1.Text = richTextBox1.Text.Remove(start, end - start);
}

Zpět do poradny Odpovědět na původní otázku Nahoru