C# Vraagje
Moderator: Moderators
Re: C# Vraagje
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
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
- Arie Kabaalstra
- Donateur
- Berichten: 13538
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer:
Re: C# Vraagje
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..
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..
- Arie Kabaalstra
- Donateur
- Berichten: 13538
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer:
Re: C# Vraagje
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..
't enige wat ik dan moet controleren is of er niet ergens een letter in zit..
- Arie Kabaalstra
- Donateur
- Berichten: 13538
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer:
Re: C# Vraagje
Ik heb er de Controle ingezet om te zien of het geen "Comment" is, met:
Dus alle regels met () en : slaat ie over
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. )
Code: Selecteer alles
if (Regex.IsMatch(lines[i], @"^((?![();]).)*$"))
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);
}
}
}
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. )
- Arie Kabaalstra
- Donateur
- Berichten: 13538
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer:
Re: C# Vraagje
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..
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..
Re: C# Vraagje
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
- Arie Kabaalstra
- Donateur
- Berichten: 13538
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer:
Re: C# Vraagje
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..
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..
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;
}
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..
Re: C# Vraagje
Dan post eens de regel met de Y die het niet doet
There are only 2 limits, the sky and your imagination
- Arie Kabaalstra
- Donateur
- Berichten: 13538
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer:
Re: C# Vraagje
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?
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?
-
- Berichten: 141
- Lid geworden op: 27 jun 2017 13:40
- Locatie: Hengelo
Re: C# Vraagje
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
- Arie Kabaalstra
- Donateur
- Berichten: 13538
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer:
Re: C# Vraagje
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..
op de WerkplaatsPC (win 7) Draait het niet.. geen foutmeldingen, maar 't start niet op.. ook niet als ik em als Administrator uitvoer..
Re: C# Vraagje
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.
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
- Arie Kabaalstra
- Donateur
- Berichten: 13538
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer: