C# Vraagje

Vragen die je boven niet kwijt kunt, kan je hier stellen.

Moderator: Moderators

Plaats reactie
hfjbuis
Donateur
Berichten: 3075
Lid geworden op: 13 feb 2017 00:26
Locatie: Hoensbroek

Re: C# Vraagje

Bericht door hfjbuis »

Post even de eerste drie regels die moeten worden vertaald.

Ongeteste regel die je kunt toevoegen
Mask += @" (?<ASZ>Z)";
Mask += @"(?<VALUEZ>-?\d{1,5}(.\d{1,5})?)";
Mask += "(?<REST>[^\r\n]*)?.

Deze regel stopt de waarde van z in VALUEZ als er een z waarde is gegeven.

Er moet een spatie voor Z staan!

Succes, huub
There are only 2 limits, the sky and your imagination
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13488
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: C# Vraagje

Bericht door Arie Kabaalstra »

dus als ik het goed zie, komt het "filter" voor de Z-waarden boven de filter van de "rest"?..

dan ga ik daar even mee spelen.. ik had al het vermoeden dat het zoiets zou zijn.. alvast bedankt.. Ik ga ze er straks even tussen frommelen..
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13488
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: C# Vraagje

Bericht door Arie Kabaalstra »

Ik kreeg dat gisteravond niet werkend, maar ik ben nog even verder gedoken in String.Split, en verdikke.. Daar haal ik toch wel resultaten mee.

't enige wat ik dan moet controleren is of er niet ergens een letter in zit..
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13488
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: C# Vraagje

Bericht door Arie Kabaalstra »

Ik heb er de Controle ingezet om te zien of het geen "Comment" is, met:

Code: Selecteer alles

 if (Regex.IsMatch(lines[i], @"^((?![();]).)*$"))
Dus alle regels met () en : slaat ie over

Code: Selecteer alles

for (int i = 0; i < ImportBox.Lines.Length; i++)
                {
                    if (Regex.IsMatch(lines[i], @"^((?![();]).)*$"))
                    {
                        if (lines[i].Contains("Y"))
                        {
                            String YSegment = lines[i];
                            string value_y = YSegment.Split('Y')[1];
                            ExportBox.Text += YSegment + "     ";
                            value_y = value_y.Split(' ')[0];
                            ExportBox.Text += value_y + Environment.NewLine;
                            if (Regex.IsMatch(value_y, @"^((?![a-zA-Z;:\/,]).)*$"))
                            {
                                val = double.Parse(value_y);
                                
                            }                            
                        }
                    }
Hiermee toont ie de regels die een Y bezitten, en achteraan toont ie de coordinaat nog een keer extra.. want dat deel moet ik natuurlijk hebben..
die waarde (val) haal ik er dus uit, en die kan ik dan vermenigvuldigen, en terugzetten..(de index van Y op te vragen, en die waarde daarachter neer te gooien, ter vervanging van de oude waarde (hoe ik dat moet doen is nog even uitzoeken. )
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13488
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: C# Vraagje

Bericht door Arie Kabaalstra »

Ik ben een poos aan het tobben geweest.. maar die String.Split methode lijkt mij de meest eenvoudige (voor mij in elk geval, want ik krijg nog altijd geen hoogte van RegEx)

Momenteel heb ik het zo dat ie elke regel uit de Import haalt, in een string (ik gebruik daar momenteel een Textboxje voor, want dan kan ik het tijdens testen zichtbaar maken..

Ik kijk dan eerst of er een "Y" in staat. dan vervang ik die voor een A, dan peuter ik de Waarde eruit, verreken die, en zet die erin (dat kan in de Zelfde If.. want als er een Y is, dan is er altijd een Waarde.. anders is je Code gammel, en heeft omzetten sowieso geen nut.
dan herhaal ik die riedel, maar dan voor de Z waarde, met dezelfde string (uit de textbox).. en dan plemp ik ze in de Box voor de export.

misschien niet de snelste, of meest efficiente, maar wel een methode die ik met mijn gebrekkige kunde op het gebied van C# programmeren kan volgen..
hfjbuis
Donateur
Berichten: 3075
Lid geworden op: 13 feb 2017 00:26
Locatie: Hoensbroek

Re: C# Vraagje

Bericht door hfjbuis »

Zoals belooft, de code en een beetje opgepoetst.

Code: Selecteer alles

  
        void test()
        {
            String Source = "G00 X1.1111 Y0.0931 Z2.4";
            String Converted = Source;
            String Mask = "";
            Mask = "";
            Mask += @"(?<BEGIN>.*?)";                                   // het begin
            Mask += @" X";                                              // een spatie en dan de letter X
            Mask += @"(?<VALUEX>-?\d{1,5}(.\d{1,5})?)";                 // de waarde van 1 tot 5 cijfers en optioneel een punt gevolgd door 1 to 5 decimalen
            Mask += @" Y";                                             
            Mask += @"(?<VALUEY>-?\d{1,5}(.\d{1,5})?)";                
            Mask += @" Z";                                             
            Mask += @"(?<VALUEZ>-?\d{1,5}(.\d{1,5})?)";                
            Mask += @"(?<REST>[^\r\n]*)?.*";                            // the rest, alles tot aan de crlf

            Match MatchResult = Regex.Match(Source, Mask);
            if (MatchResult.Success)
            {
                String b = MatchResult.Groups["BEGIN"].ToString();
                String vX = MatchResult.Groups["VALUEX"].ToString();
                String vY = MatchResult.Groups["VALUEY"].ToString();
                String vZ = MatchResult.Groups["VALUEZ"].ToString();
                String r = MatchResult.Groups["REST"].ToString();
                Converted = b + " X" + vX + " A" + vY + " Z" + vZ + r;
            }
        
There are only 2 limits, the sky and your imagination
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13488
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: C# Vraagje

Bericht door Arie Kabaalstra »

Dank, maar ik kreeg er helaas geen goede code mee.. alleen de eerste Y werd geconverteerd naar A..

Onderstaande Code geeft, voorzover ik heb kunnen controleren in EdingCNC wél goede code..

Code: Selecteer alles

private void ConvertBttn_Click(object sender, EventArgs e)
        {
            ExportBox.Clear();
            CheckBox.Clear();
            string[] WorkLine = ImportBox.Text.Split('\n');
            for (int i = 0; i < ImportBox.Lines.Length; i++)
            {
                CheckBox.Text += WorkLine[i].ToUpper();
                if (CheckBox.Text != "")
                {
                    if (CheckBox.Text.Contains("Y"))
                    {

                        string Ysegment = WorkLine[i];
                        string YValue = Ysegment.Split('Y')[1];
                        YValue = YValue.Split(' ')[0];
                        double YVal = double.Parse(YValue);
                        YVal = Math.Round(YVal * -anglepermm, 4);
                        //MessageBox.Show(YVal.ToString ());
                        WorkLine[i] = WorkLine[i].Replace("Y", "A");
                        WorkLine[i] = WorkLine[i].Replace(YValue, YVal.ToString());
                    }
                    if (CheckBox.Text.Contains("Z"))
                    {

                        string Zsegment = WorkLine[i];
                        string ZValue = Zsegment.Split('Z')[1];
                        ZValue = ZValue.Split(' ')[0];
                        double ZVal = double.Parse(ZValue);
                        ZVal = Math.Round(ZVal + Radius, 4);
                        //MessageBox.Show(YVal.ToString ());
                        // WorkLine[i] = WorkLine[i].Replace("Y", "A");
                        WorkLine[i] = WorkLine[i].Replace(ZValue, ZVal.ToString());
                    }
                    ExportBox.Text += WorkLine[i] + "\r\n";
                    //ExportBox.Text += WorkLine[i] + Environment.NewLine;
                    CheckBox.Clear();
                    // Y-A lijkt te werken.. zelfde recept voor Z gebruiken..
                }
            }
            SaveBttn.Enabled = true;
        }
Ik Peuter een regel uit de ImportBox, die knoop ik in een Textbox (CheckBox), en dan kijk ik of er een Y in zit.. zo ja.. dan peuter ik de getallen erachter eruit, Knoop ze in een Double, vermenigvuldig ze, en vervang het originele stukje uit de string met de nieuwe waarde .ToString()

Die aldus gevormde String Controleer ik dan op de aanwezigheid van een Z, Peuter de cijfertjes erachter op de zelfde manier eruit, en vermeerder ze met de Radius die berekend is uit de opgegeven diameter, Terugzetten, String samenstellen, en em dan in de Exportbox gooien met een /r/n erachter voor een nieuwe regel..

Nu ben ik dus in staat om meerdere diameters te maken uit één programma dat geprogrammeerd is op Z0.. wel zo handig..
hfjbuis
Donateur
Berichten: 3075
Lid geworden op: 13 feb 2017 00:26
Locatie: Hoensbroek

Re: C# Vraagje

Bericht door hfjbuis »

Dan post eens de regel met de Y die het niet doet
There are only 2 limits, the sky and your imagination
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13488
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: C# Vraagje

Bericht door Arie Kabaalstra »

Even terug naar de EMCOterminal.

Ik heb 't inmiddels zover dat ik een build heb die op mijn PC gewoon werkt.. da's fijn.. maar de PC in de werkplaats.. die draait in plaats van Windows 10 nog Windows 7...

Wat is wijsheid?.. kan ik een programma Compileren voor Window's 7, en zoja hoe doe ik dat?.. of moet ik gewoon mijn werkplaats PC upgraden naar Windows 10?.. en hoe doe ik dat zonder Internet aansluiting?
lordprimoz
Berichten: 141
Lid geworden op: 27 jun 2017 13:40
Locatie: Hengelo

Re: C# Vraagje

Bericht door lordprimoz »

Volgens mij kan je gewoon de .net 7(of 6, afhankelijk van waar je jouw softwaremee compiler hebt) runtime installeren en zou alles gewoon moeten werken
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13488
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: C# Vraagje

Bericht door Arie Kabaalstra »

Toen ik de software vanmorgen op mijn PC wilde testen, draaiend vanuit de Map (dus niet in Debug modus vanuit Visual Studio 2019) wilde ie Windowsdesktop-Runtime-5.0.1.7-win-x64 hebben.. die heb ik gedownload en geinstalleerd.. en daarmee deed ie het na installatie van die Runtime op de Laptop ook (ook Win 10)

op de WerkplaatsPC (win 7) Draait het niet.. geen foutmeldingen, maar 't start niet op.. ook niet als ik em als Administrator uitvoer..
hfjbuis
Donateur
Berichten: 3075
Lid geworden op: 13 feb 2017 00:26
Locatie: Hoensbroek

Re: C# Vraagje

Bericht door hfjbuis »

Je gebruikt waarschijnlijk een 32 bit windows7 computer. Dan moet je de applicatie als 32 bit compileren.
Je hebt een dotnet applicatie. Als de installer die dotnet niet op de PC zet tijdens het installeren, moet je deze met de hand installeren. Je kunt daarvoor het bestand: dotNetFx40_Full_x86_x64.exe van microsoft downloaden.
Lukt het allemaal niet, dan kun je de remote debugger installeren (vs_remotetools.exe) op de Windows7 PC en het programma debuggen vanuit de ontwikkel PC. Dat laat waarschijnlijk wel zien waar het fout gaat.
There are only 2 limits, the sky and your imagination
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13488
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: C# Vraagje

Bericht door Arie Kabaalstra »

Moet ik dan als Platform Target "x86" kiezen?..
hfjbuis
Donateur
Berichten: 3075
Lid geworden op: 13 feb 2017 00:26
Locatie: Hoensbroek

Re: C# Vraagje

Bericht door hfjbuis »

Arie Kabaalstra schreef: 22 jun 2022 21:43 Moet ik dan als Platform Target "x86" kiezen?..
Inderdaad
There are only 2 limits, the sky and your imagination
Plaats reactie