Editace textu VB.NET   zodpovězená otázka

VB.NET

Zdravím ,potřeboval bych poradit s editací textu ,kdy potřebuji naradit text na různých řádcích.

Příklad:

první řádek -> smazat

(zachovat text v závorce) -> MSG("zachovat text v závorce")

původní text -> změněný text

...........

..........

několik řádků

vždy jiný počet řádků

............

............

původní text -> změněný text

původní text -> změněný text

Jde vždy o první tři řádky a poslední dva řádky.Měl jsem udělané macro ve Wordu ,ale to je dosti zdlouhavé a chtěl bych i zkusit něco ve VB.NET. Je to asi záčátečnický dotaz ,tak snad mě tu neukamenujete.

Předem děkuji za rady

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak tady Vám asi nikdo neporadí, když nebude znát přesnou strukturu toho souboru.

Hlavní problém je v těch posledních řádcích (pokud nejsou úplně poslední), které budete muset podle něčeho identifikovat a pak je změnit.

Šikovné čtení stringu po řádcích je zde:

http://stackoverflow.com/questions/15001...

V tom cyklu akorát vymyslíte podmínky, které vyhodnotí buď pořadí řádku, nebo jeho obsah a podle toho ho (ne)změní.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

No takhle ,ty první tři řádky musí být vždy editovány tak jak jsem psal nahoře ,a ty poslední dva řádky které jsou vždy i poslední v textu musí být také nahrazeny , původně byla moje naivní myšlenka ,že bych macro z wordu nějak převedl do VB ,ale dost rychle jsem zjistil že je to blbost :)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Potom ani nepotřebujete cyklicky procházet, stačí použít komponentu, co jsem postoval. Je to sice C#, ale snadno to přepíšete do VB.NET.

btw text, který chcete změnit je v mé ukázce v proměnné input.

            var radky = new LineReader(() => new StringReader(input)).ToList();
            radky.RemoveAt(0);
            radky[0] = radky[0].Substring(radky[0].IndexOf("MSG(\""), radky[0].IndexOf("\")"));
            radky[1] = "zmeneny text";
            radky[radky.Count - 2] = "zmeneny text";
            radky[radky.Count - 1] = "zmeneny text";

U toho druhého řádku to zachová akorát text v závorce, vše ostatní bude pryč. Ošetření si už doděláte.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Já Vám velice děkuji ,já právě hledal jak to udělat přes STRINGy ,ale tohle se zdá být jednoduché a postačující ,ještě se prokoušu překladem do VB.NET a bude.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Takže i přes rady ,prostě nejsem schopen to dát dohromady ,takže jsem došel k závěru ,že bez nastudování jazyka nemá cenu se do toho pouštět, jelikož na to nemám čas poprosím o pomoc Vás odborníky , takže pokud někdo bude od té dobroty a ochoty obětovat čas potřebuji následující z původního textu udělat "tento text" :

%MPF----                        " tento řádek smazat "
N10 (komentar)                  " MSG("komentar") "         ->komentář v závorce ponechat 
N10 G72 G90 G17 X Y0            " N10 G0 G53 X0 Y0 Z0 D0 "
N11 T5 D5                       " N11 T="?" D1 M6 "


...................................................
spousty řádků původního textu bez nutnosti editace
...................................................

N2000 M5                        " N9998 G0 G53 X0 Y0 Z0 D0 M9 M5 "
N2001 M17                       " N9999 M30"

|

Jedná se vždy o první 4 řadky dokumentu a poslední 2 řádky dokumentu.

Měl jsem to v úmyslu udělat tak že by to byla funkce nějakého tlačítka které by změnilo ten text ,který načtu do textboxu.Jde mi jen o tu funkci toho tlačítka ,načtení a uložení už zvládnu :)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Trochu jsem na tom zapracoval a náhradu textu mám jakž takž vyřešenou následovně:

      
        TextBox3.Text = Replace(TextBox3.Text, "%MPF----", "")
        TextBox3.Text = Replace(TextBox3.Text, "(", "MSG(""")
        TextBox3.Text = Replace(TextBox3.Text, ")", """)")
        TextBox3.Text = Replace(TextBox3.Text, "G71 G90 G92 X0 Y0 ", "G0 G53 G90 X0 Y0 Z0 D0")
        TextBox3.Text = Replace(TextBox3.Text, "M17", "M30")
        TextBox3.Text = Replace(TextBox3.Text, "M05", "G0 G53 X0 Y0 Z0 D0 M9 M5")
        TextBox3.Text = Replace(TextBox3.Text, "G80", "MCALL")|

Jen mám pořád problém s tím jak nahradit text v řádku ,který je pokaždý jiný , dalo by se chytit toho že první písmeno a délka je vždy stejná, takže mě napadlo jetli by šlo udělat ,že vyhledám dané písmeno označil by i znak vedle písmena a program by ho nahradil mým řetězcem, nebo to udělat jiným způsobem ,je to tento řetězec a za písmeny T a D je vždy jiné číslo které musí být nahrazeno

N11 T5 D5                       " N11 T="?" D1 M6 " |

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak jsem to vyřešil tak že jsem vypsal všechny možný kombinace ,takže mám hotovo.

Děkuji za rady .... :)

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback