|
Thank you. The app is an extension of one written for my own company where we have rules around how BIM files can be named. It seemed to me that the app might be useful for others.
You are quite right, there needn't be any rules, just a common location for saving such files.
|
|
|
|
|
ormonds wrote: It also sounds like someone might have done it before - extracted the regex pattern from a given string.
...
Any suggestions?
1. Don't do that.
2. Allow, but do not require them to enter a regex. The problem with this is that either you must carefully validate that (limit their regex) or you run the risk of allowing them to entire something that could be valid but could have serious problems (read the book "Mastering Regular Expressions".)
3. They can submit a regex to the operations team. They validate it and if ok enter it in for the account via a Operations only option.
|
|
|
|
|
Hi,
I would not use Regex at all. Instead, have the filename pattern specified as a string where some special codes are allowed, and will be replaced by their actual value.
Your example could be defined by "Project{P}-{N}-{D}-{V}.dat" , and now your code should replace
{P} by the project name
{N} by the project number
{D} by the drawing number
{V} by the version number/letter
which basically takes four calls to string.Replace() , where you:
1. may or may not enforce these codes to be present;
2. may or may not allow for case-insensitivy when looking for those codes;
3. must take care of avoiding illegal filenames; you may have to create a project name clone
that does not contain any character that would be unacceptable in a file name.
|
|
|
|
|
Write a console program in <b>C#</b> to print out 5 verses
<b>Please provide two solutions if you can, one using polymorphysm and one with .</b>
-- modified 21-Apr-19 10:03am.
|
|
|
|
|
We aren't here to do your work for you.
If you want someone to write your code, you have to pay - I suggest you go to Freelancer.com and ask there.
But be aware: you get what you pay for. Pay peanuts, get monkeys.
The idea of "development" is as the word suggests: "The systematic use of scientific and technical knowledge to meet specific objectives or requirements." BusinessDictionary.com
That's not the same thing as "have a quick google and give up if I can't find exactly the right code".
So either pay someone to do it, or learn how to write it yourself. We aren't here to do it for you.
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
If you can't answer your own interview questions (and this assignment is not very difficult at all), maybe you don't deserve to get the job you're interviewing for.
|
|
|
|
|
Hi,
I'm sure integrating this[^] will get you some bonus points.
|
|
|
|
|
|
please get me the souce code.
|
|
|
|
|
What have you tried?
Where are you stuck?
What help do you need?
We aren't here to do your work for you.
If you want someone to write your code, you have to pay - I suggest you go to Freelancer.com and ask there.
But be aware: you get what you pay for. Pay peanuts, get monkeys.
The idea of "development" is as the word suggests: "The systematic use of scientific and technical knowledge to meet specific objectives or requirements." BusinessDictionary.com[^]
That's not the same thing as "have a quick google and give up if I can't find exactly the right code".
So either pay someone to do it, or learn how to write it yourself. We aren't here to do it for you.
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
|
I still have my GUID: A483FD8F-77F9-45DD-922F-1051E859CDDF
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
Where did you put it? ... master.
"(I) am amazed to see myself here rather than there ... now rather than then".
― Blaise Pascal
|
|
|
|
|
Igor! Fetch me a Brain!
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
It's in the mortar vessel with the pestle.
"(I) am amazed to see myself here rather than there ... now rather than then".
― Blaise Pascal
|
|
|
|
|
Making a couple of assumptions here
1. your using win forms
2. you want your tab control to resize when you change the form?
if so I would suggest that you look into the anchor properties in the tab control.
Every day, thousands of innocent plants are killed by vegetarians.
Help end the violence EAT BACON
|
|
|
|
|
Do not put a Form in a TabPage. Use a Panel that you make resizable if/when necessary.
«Where is the Life we have lost in living? Where is the wisdom we have lost in knowledge? Where is the knowledge we have lost in information?» T. S. Elliot
|
|
|
|
|
<pre>using System;
namespace DoublyLinkedList
{
class Link<T> : IComparable<Link<T>> where T : IComparable<T>
{
public Link(T data)
{
Data = data;
Next = null;
Previous = null;
}
public T Data {get;set;}
public Link<T> Next {get;set;}
public Link<T> Previous {get;set;}
public int CompareTo(Link<T> other) {return Data.CompareTo(other.Data);}
public int CompareTo(T other) {return Data.CompareTo(other);}
public void DisplayLink()
{Console.Write(Data.ToString() + " ");}
}
}
<pre>using System;
namespace DoublyLinkedList
{
class DoublyLinkedList<T> where T :IComparable<T>
{
public Link<T> First {get;set;}
public Link<T> Last {get;set;}
public DoublyLinkedList() {First = null;Last = null;}
public Link<T> Find(T key)
{
Link<T> current = First;
while(current.CompareTo(key) != 0)
{
if(current.Next == null)
return null;
else
current = current.Next;
}
return current;
}
public bool IsEmpty()
{return First == null;}
public void InsertFirst(T dd)
{
Link<T> NewLink = new Link<T>(dd);
if(IsEmpty())
Last = NewLink;
else
First.Previous = NewLink;
NewLink.Next = First;
First = NewLink;
}
public void InsertLast(T dd)
{
Link<T> NewLink = new Link<T>(dd);
if(IsEmpty())
First = NewLink;
else
{
Last.Next = NewLink;
NewLink.Previous = Last;
}
Last = NewLink;
}
public Link<T> DeleteFirst()
{
if(IsEmpty())
return null;
Link<T> temp = First;
if(First.Next == null)
Last = null;
else
First.Next.Previous = null;
First = First.Next;
return temp;
}
public Link<T> DeleteLast()
{
if(IsEmpty())
return null;
Link<T> temp = Last;
if(First.Next == null)
First = null;
else
Last.Previous.Next = null;
Last = Last.Previous;
return temp;
}
public bool InsertAfter(T key,T dd)
{
Link<T> current = Find(key);
if(current == null)
return false;
Link<T> NewLink = new Link<T>(dd);
NewLink.Next = current.Next;
if(current.Next == null)
Last = NewLink;
else
current.Next.Previous = NewLink;
NewLink.Previous = current;
current.Next = NewLink;
return true;
}
public Link<T> DeleteKey(T key)
{
Link<T> current = Find(key);
if(current == null)
return null;
if(current.Previous == null)
First = current.Next;
else
current.Previous.Next = current.Next;
if(current.Next == null)
Last = current.Previous;
else
current.Next.Previous = current.Previous;
return current;
}
public void DisplayForward()
{
Console.Write("List (first-->last): ");
Link<T> current = First;
while(current != null)
{
current.DisplayLink();
current = current.Next;
}
Console.WriteLine("");
}
public void DisplayBackward()
{
Console.Write("List (last-->first): ");
Link<T> current = Last;
while(current != null)
{
current.DisplayLink();
current = current.Previous;
}
Console.WriteLine("");
}
public void Split(ref DoublyLinkedList<T> L1,ref DoublyLinkedList<T> L2)
{
Link<T> p = First;
Link<T> q = Last;
while(p != q && p.Next != q)
{
p = p.Next;
q = q.Previous;
}
if(p == null || p.Next == null)
{
L1.First = First;
L1.Last = Last;
L2.First = null;
L2.Last = null;
}
else
{
q = p.Next;
p.Next = null;
q.Previous = null;
L1.First = First;
L1.Last = p;
L2.First = q;
L2.Last = Last;
}
}
public void Merge(DoublyLinkedList<T> L1,DoublyLinkedList<T> L2)
{
Link<T> p,q;
First = null;
Last = null;
if(L1.First != null && L2.First != null)
{
if(L1.First.CompareTo(L2.First) <= 0)
{
p = L1.First;
if(L1.First.Next == null)
L1.Last = null;
else
L1.First.Next.Previous = null;
L1.First = L1.First.Next;
p.Next = null;
First = p;
Last = p;
}
else
{
q = L2.First;
if(L2.First.Next == null)
L2.Last = null;
else
L2.First.Next.Previous = null;
L2.First = L2.First.Next;
q.Next = null;
First = q;
Last = q;
}
}
while(L1.First != null && L2.First != null)
{
if(L1.First.CompareTo(L2.First) <= 0)
{
p = L1.First;
if(L1.First.Next == null)
L1.Last = null;
else
L1.First.Next.Previous = null;
L1.First = L1.First.Next;
p.Next = null;
Last.Next = p;
p.Previous = Last;
Last = p;
}
else
{
q = L2.First;
if(L2.First.Next == null)
L2.Last = null;
else
L2.First.Next.Previous = null;
L2.First = L2.First.Next;
q.Next = null;
Last.Next = q;
q.Previous = Last;
Last = q;
}
}
if(Last != null)
Last.Next = L1.First;
else
First = L1.First;
if(L1.First != null)
{
L1.First.Previous = Last;
Last = L1.Last;
}
if(Last != null)
Last.Next = L2.First;
else
First = L2.First;
if(L2.First != null)
{
L2.First.Previous = Last;
Last = L2.Last;
}
}
public void MergeSort()
{
DoublyLinkedList<T> h1 = new DoublyLinkedList<T>();
DoublyLinkedList<T> h2 = new DoublyLinkedList<T>();
if(First != null && First.Next != null)
{
Split(ref h1,ref h2);
h1.MergeSort();
h2.MergeSort();
Merge(h1,h2);
}
}
}
}
How can I avoid new operator inside MergeSort function
I translated Lafore List and wrote Merge Sort function
|
|
|
|
|
Pass the two lists to be sorted/merged into the MergeSort method as parameters. The way it is now, you're creating two lists with nothing in them, so nothing is going to happen when you sort and merge.
".45 ACP - because shooting twice is just silly" - JSOP, 2010 ----- You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010 ----- When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013
|
|
|
|
|
It will sort but with new it can waste memory
Without new I get NullPointer Exception but
maybe i can avoid that in other way
I'm new in C# i found it not so long ago in my system
In my OS there is C# 5.0 and it is not updated with system
|
|
|
|
|
Hi, I am fairly new to C# coding so be gentle
I am trying to receive measurement data from a two sensors DHT11 and soimoisture sensor connected to my Arduino. At this stage I just want to receive the raw measurement data and represent them in separate text boxes. I have almost managed it but I am getting some errors.
More specifically I get this error:
System.ArgumentOutOfRangeException: 'Index was out of range. Must be non-negative and less than the size of the collection.<br />
Parameter name: index'
Here is my code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;
namespace PlantMonitoringApp
{
public partial class Form1 : Form
{
private SerialPort myport;
private DateTime datetime;
private string in_data;
public Form1()
{
InitializeComponent();
}
private void start_btn_Click(object sender, EventArgs e)
{
myport = new SerialPort();
myport.BaudRate = 9600;
myport.PortName = port_name_tb.Text;
myport.Parity = Parity.None;
myport.DataBits = 8;
myport.StopBits = StopBits.One;
myport.DataReceived += Myport_DataReceived1;
try
{
myport.Open();
time_text_box.Text = "";
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error");
}
}
void Myport_DataReceived1(object sender, SerialDataReceivedEventArgs e)
{
in_data = myport.ReadLine();
this.Invoke(new EventHandler(displaydata_event));
}
private void displaydata_event(object sender, EventArgs e)
{
datetime = DateTime.Now;
string time = datetime.Hour + ":" + datetime.Minute + ":" + datetime.Second;
time_text_box.Text = time;
string[] sensorData = in_data.Split(new char[] { ' ',' ',' '});
List<string> tokens = new List<string>();
foreach (string s in sensorData)
{
if (s.Length !=0)
{
tokens.Add(s);
}
}
txtTemperature.Text = tokens[0];
txtHumidity.Text = tokens[1];
txtSoil_moisture.Text = tokens[2];
}
|
|
|
|
|
There's no guarantee that tokens has data.
txtTemperature.Text = tokens[0];
"(I) am amazed to see myself here rather than there ... now rather than then".
― Blaise Pascal
|
|
|
|
|
Why is there no guarantee? Sometimes it works, that's the strange part . Any suggestions?
|
|
|
|
|
I always tied my serial port "Read()", and the "bytes read" that it returns, with the "BytesToRead" as indicated by the port.
In other words, I never have occasion to just "read" without first requesting data via a "write".
The reading is managed within the timeout "window".
Write ... wait (check the time) ... (expecting bytes to be read > 0 ) read ... more bytes to be read? ... wait (timeout?) .... read again ... etc. until all read or timeout; then the next write for data request.
You build a message until no more bytes to be read; then fire it off to the rest of the processing; insuring you actually split 3 tokens and didn't receive garbage in the first place.
"(I) am amazed to see myself here rather than there ... now rather than then".
― Blaise Pascal
|
|
|
|
|
Hi,
Reading from a SerialPort isn't always easy. Your code may fail to work reliably for several reasons:
1.
The SerialPort.DataReceived event is fired when one or more characters have been received; there is no strict definition of when it fires. And it is not synchronized to anything, it is not aware of what you consider a message (such as a piece of text terminated by a newline).
2.
SerialPort.ReadLine() returns one line of text assuming a newline has been received; if not a timeout exception will occur.
3.
You are using two threads, and communicating between them using a single string (in_data). It is conceivable that two DataReceived events occur before the other thread manages to execute displaydata_event(). In that case, you would loose data.
If you are in charge of software on both sides, the simplest approach would be like this:
1. don't let the peripheral send data at will, make it a slave that doesn't have the initiative, instead it executes commands when it receives them
2. send a command to the peripheral requesting (a measurement and) the return of data
3. wait a short time
4. read the data synchronously
So basically that would be:
SerialPort port;
...
port.Open();
...
port.WriteLine("T");
Thread.Sleep(100);
string temp=port.ReadLine();
textbox.Text=temp;
The delay should be sufficient for the peripheral to perform the measurement, and the serial port to transmit and receive the data. Since 9600 Baud would correspond to approx 1 msec per character, delaying for 100 msec seems reasonable, and not too harmful for your GUI interface.
Of course, the proper way to do communication is asynchronous, but then you need to take care of proper synchronisation and data transfer; that would include:
1. reading the port with ReadExisting, not ReadLine;
2. collecting the incoming characters;
3. identifying message boundaries;
4. passing results to another thread, using some real data structure (possibly a queue).
Hope this helps.
modified 19-Apr-19 17:08pm.
|
|
|
|