|
Your showing of the "fff" format characters prompted me to see if you can expand them out to six characters and use the TryParseExact overload that excepts an array of formats. It does. A little more playing around with the formats and it all becomes so simple after all.
This is real simple now especially after I noticed the other overload on TryParseExact that takes an array of formats to test.
string[] formats = { "yyyy-MM-dd\\THH:mm:ss\\Z",
"yyyy-MM-dd\\THH:mm:ss.f\\Z",
"yyyy-MM-dd\\THH:mm:ss.ff\\Z",
"yyyy-MM-dd\\THH:mm:ss.fff\\Z",
"yyyy-MM-dd\\THH:mm:ss.ffff\\Z",
"yyyy-MM-dd\\THH:mm:ss.fffff\\Z",
"yyyy-MM-dd\\THH:mm:ss.ffffff\\Z",
"yyyy-MM-dd\\THH:mm:sszzz",
"yyyy-MM-dd\\THH:mm:ss.fzzz",
"yyyy-MM-dd\\THH:mm:ss.ffzzz",
"yyyy-MM-dd\\THH:mm:ss.fffzzz",
"yyyy-MM-dd\\THH:mm:ss.ffffzzz",
"yyyy-MM-dd\\THH:mm:ss.fffffzzz",
"yyyy-MM-dd\\THH:mm:ss.ffffffzzz"
};
DateTime dt1 = default(DateTime);
bool res1 = System.DateTime.TryParseExact("1985-04-12T20:20:59.100000-00:15",
formats, System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.AdjustToUniversal,
out dt1);
DateTime dt2 = default(DateTime);
bool res2 = System.DateTime.TryParseExact("1985-04-12T20:20:59.100001-00:15",
formats, System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.AdjustToUniversal,
out dt2);
Console.WriteLine(dt1.Kind.ToString());
Console.WriteLine(dt1.ToString("u"));
Console.WriteLine((dt1 < dt2).ToString());
This code works, but has the drawback of loosing the original offsets as everything gets adjusted to UTC.
You can maintain the original offset date by using the DateTimeOffset [^]structure (this structure has all the functionality that I so foolishly recreated by custom parsing). Oh, well it was fun to see if I could do it.
DateTimeOffset dto1 = new DateTimeOffset();
bool res1b = System.DateTimeOffset.TryParseExact("1985-04-12T20:20:59.100000-00:15",
formats,
System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.AssumeLocal,
out dto1); Notice the change to AssumeLocal. The DateTime and Offset properties can then be used to recreate the original string.
|
|
|
|
|
I have a file in which each line has a fixed length 1600 char
but each line has its there are different columns
Line 1 will be like this
RA01XYZ--------------------------------------------------------------------201401231
RA is Record Type
01 is Version
XYZ------------------ is client name
201401231 is date
now 2 line
SR0123456789-------------------------011234567890-
SR is record type
0123456789------------------------- is some number
You see that each line will have its own set of defined columns and it cannot be fixed width
So my question is, is it possible/advisable to apply SSIS on this or create a simple win form application using REGEX to extract and process the data.
|
|
|
|
|
Regex? No, Substring(start, length).
Read a whole line, determine the "line type", and then get its data into appropriate objects which you then insert into the db.
|
|
|
|
|
Bernhard Hiller wrote: get its data into appropriate objects
Which he may do by using an appropriate regex, so not a really bad start.
Clean-up crew needed, grammar spill... - Nagy Vilmos
|
|
|
|
|
ok, but i want a view on processing this type of file using ssis??
is it doable and advisable
|
|
|
|
|
Hi my name is vishal.For past 10 days i have been going nuts over of how to create barcode in c# windows forms with sql server 2008 using StrokeScribe control of version 4.3.2. i have done some coding here with 5 group boxes with no success. i have four group boxes
1) group box-1-name:fmeStep1,text:Step 1,visible:true.
It has 8 labels,2 comboboxes,3 textboxes,3 datetimepickers.
2) group box-2-name:fmeBarCode,text:"",visible:true
It has i label,i textbox.
3) group box-3-name:fmeDEntry,text:Dialyzer Entry,visible:true.
It has 2 radio buttons
4) group box-4-name:fmeStep2,text:Step 3,visible=true.
It has i textbox named txtDID,visible=true,enabled=true.1 button,1 strokescribe control of version:4.3.2.,name:barCDialyzer.Given below is properties of barCDialyzer:
AccessibeRole: Default
AlowDrop: false
Alphabet: EAN13
AztecECL: 23
AztecMinLayer: 1
BitmapH: 1
BiwmapW: 115
CausesValidation: true
CheckDigit: 8
CodabarHasCheckDigit: false
Code11CheckDigits: 1
Code39HasCheckDigit: false
Code39Ratio: 2
CodePage: 3
CompactPDF417: false
ECI: 0
Enabled: true
GraphicsMode: Advanced
HBorderSize: 10
I2of5Ratio: 2
ISBN10: false
ITF14BearerBox: false
ITF14BearerWidth: 5
ProcessTilde: false
QrECL: L
QrMinVersion: 1
QuietZone2D: 1
SaCount: 0
SaID: 0
SaPos: 0
ShowText: true
TextJustify: true
TextOffset: 0
UTF8: false
VBorderPercent: 5
Visible: true.
5) group box-5-name:fmeStep3,text:Step 4,visible:true.
it has 1 combobox,2 buttons,2 picturebox.
1-picturebox:pictureBox1,enabled=true,visible=true. in which i have another strokescribe named:barCOrg an a label named lblPID. given below are it's properties:
AlowDrop: false
Alphabet: EAN13
AztecECL: 23
AztecMinLayer: 1
BitmapH: 1
BiwmapW: 115
CausesValidation: true
CheckDigit: 8
CodabarHasCheckDigit: false
Code11CheckDigits: 1
Code39HasCheckDigit: false
Code39Ratio: 2
CodePage: 3
CompactPDF417: false
ECI: 0
Enabled: true
GraphicsMode: Advanced
HBorderSize: 10
I2of5Ratio: 2
ISBN10: false
ITF14BearerBox: false
ITF14BearerWidth: 5
ProcessTilde: false
QrECL: L
QrMinVersion: 1
QuietZone2D: 1
SaCount: 0
SaID: 0
SaPos: 0
ShowText: true
TextJustify: true
TextOffset: 0
UTF8: false
VBorderPercent: 5
Visible: true.
2-picturebox:pictureBox2,enabled=true,visible=false.I have embedded this pictureBox2 on pictureBox1.Given below is code of my form named:Dialyzer in which i have 2 buttons..
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 STROKESCRIBECLSLib;
using System.Data.SqlClient;
namespace DRRS_in_Csharp
{
public partial class Dialyzer : Form
{
Int32 dStepIndex;
long pUserID = 1;
SqlConnection conn = new SqlConnection("Data Source=NPD-4\\SQLEXPRESS;Initial Catalog=Tuscan46;Integrated Security=true");
SqlCommand cmd;
SqlDataAdapter drp;
DataSet ds;
string str;
DataTable dt;
public Dialyzer()
{
InitializeComponent();
SqlConnection conn = new SqlConnection("Data Source=NPD-4\\SQLEXPRESS;Initial Catalog=Tuscan46;Integrated Security=true");
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
string SqlDataPull=("Select p.patient_id as patient_id,n.patient_first_name as patient_fname,n.patient_last_name as patient_lname from PATIENT_NAME6 n,PATIENT_ID6 p where n.patient_id=p.patient_id");
SqlCommand cmd=new SqlCommand(SqlDataPull);
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
SqlDataPull=dr[0].ToString()+dr[1].ToString()+dr[2].ToString();
cboPatientID.Items.Add(SqlDataPull);
}
dr.Close();
string SqlDataPull1=("Select ManufacturerName from EQUIPMENTDATA");
cmd=new SqlCommand(SqlDataPull1);
cmd.Connection=conn;
cmd.CommandType=CommandType.Text;
dr=cmd.ExecuteReader();
while(dr.Read())
{
SqlDataPull1 = dr[0].ToString();
cboManufacturer.Items.Add(SqlDataPull1);
}
}
private void cboequipment_Type_Click(object sender,EventArgs e)
{
if(cboManufacturer.SelectedIndex==-1)
{
return;
}
SqlConnection conn = new SqlConnection("Data Source=NPD-4\\SQLEXPRESS;Initial Catalog=Tuscan46;Integrated Security=true");
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
DataTable dt=new DataTable();
cmd=new SqlCommand("Select * from EQUIPMENTDATA where ManufacturerName='"+cboManufacturer.Text+"' and volume='"+cboequipmentType.Text+"'",conn);
}
private void cboManufacturer_Click(object sender,EventArgs e)
{
SqlConnection conn = new SqlConnection("Data Source=NPD-4\\SQLEXPRESS;Initial Catalog=Tuscan46;Integrated Security=true");
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
DataTable dt = new DataTable();
dt.Clear();
SqlDataAdapter adp = new SqlDataAdapter();
cmd=new SqlCommand("Select volume from EQUIPMENTDATA where ManufacturerName='" + cboManufacturer.Text + "'",conn);
adp = new SqlDataAdapter(cmd);
adp.Fill(dt);
}
private void cboPatientID_Click(object sender,EventArgs e)
{
if(cboPatientID.SelectedIndex!=-1)
{
btnSearch.Enabled=true;
button3.Enabled=true;
SqlConnection conn = new SqlConnection("Data Source=NPD-4\\SQLEXPRESS;Initial Catalog=Tuscan46;Integrated Security=true");
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd=new SqlCommand("Select * from PATIENT_NAME where patient_id="+cboPatientID.GetItemText(cboPatientID.SelectedIndex)+"'",conn);
if(txtDID.Text.Length>5)
{
txtDID.Text=txtDID.Text.Substring(0,5);
}
DataTable dt=new DataTable();
if(dt.Rows.Count==-1)
{
if((cmd.Parameters.AddWithValue("@virology",SqlDbType.Int).Value.GetHashCode()==0))
{
txtDID.Text=txtDID.Text+1;
}
else
{
txtDID.Text=txtDID.Text+0;
}
}
else
{
txtDID.Text=txtDID.Text+0;
}
lblPID.Text=cboPatientID.Text.Substring(cboPatientID.Text.IndexOf(cboPatientID.Text,1));
barCDialyzer.Alphabet=STROKESCRIBELib.enumAlphabet.AZTEC;
barCDialyzer.CtlText=txtDID.Text+(char)9;
barCOrg.Alphabet=STROKESCRIBELib.enumAlphabet.AZTEC;
barCOrg.CtlText=txtDID.Text+(char)9;
int rc=0;
rc =barCOrg.SavePicture("D:\\Workarea\vishal\vishal c#\\DRRS in Csharp\\DRRS in Csharp\bar1.bmp", STROKESCRIBELib.enumFormats.BMP,barCOrg.BitmapW,barCOrg.BitmapH);
if(rc>0)
{
MessageBox.Show(barCOrg.ErrorDescription);
}
else
{
btnSearch.Enabled=false;
button3.Enabled=false;
}
}
}
private void barCDialyzer_Enter(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
if(txtDID.Tag.ToString()=="0")
{
btnNext.Enabled=true;
button1.Enabled=false;
txtDID.Enabled=false;
barCDialyzer.Alphabet=STROKESCRIBELib.enumAlphabet.AZTEC;
barCDialyzer.CtlText=txtDID.Text+(char)9;
barCOrg.Alphabet=STROKESCRIBELib.enumAlphabet.AZTEC;
barCOrg.CtlText=txtDID.Text+(char)9;
int rc = 0;
rc = barCOrg.SavePicture("D:\\Workarea\vishal\vishal c#\\DRRS in Csharp\\DRRS in Csharp\bar1.bmp", STROKESCRIBELib.enumFormats.BMP, barCOrg.BitmapW, barCOrg.BitmapH);
if (rc > 0)
{
MessageBox.Show(barCOrg.ErrorDescription);
}
}
}
private void btnNext_Click(object sender, EventArgs e)
{
if (fmeDEntry.Visible == true)
{
fmeDEntry.Visible = false;
}
if (optDEntry1.Checked == false)
{
fmeBarCode.Visible = false;
fmeStep1.Visible = true;
}
{
if (dStepIndex == 0)
{
string dFieldName = "";
Boolean vEmptyB = false;
if (cboManufacturer.SelectedIndex == -1)
{
vEmptyB = true;
dFieldName = "Please select a manufacturer";
}
else if (cboequipmentType.SelectedIndex == -1)
{
vEmptyB = true;
dFieldName = "Please select size of dialyzer";
}
else if (txtMFRRefNo.Text.ToString().Trim() == "")
{
vEmptyB = true;
dFieldName = "Please enter equipment reference number";
}
else if (txtMFRLotNo.Text.ToString().Trim() == "")
{
vEmptyB = true;
dFieldName = "Please enter equipment lot number";
}
else if (txtPVol.Text.ToString().Trim() == "")
{
vEmptyB = true;
dFieldName = "Please enter packed_volume of equipment";
}
if (vEmptyB == true)
{
MessageBox.Show(dFieldName + "should not be empty");
return;
}
SqlConnection conn = new SqlConnection("Data Source=NPD-4\\SQLEXPRESS;Initial Catalog=Tuscan46;Integrated Security=true");
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
string dDID = "";
cmd = new SqlCommand("select max(agn) from DIALYSER", conn);
cmd = new SqlCommand("Insert into DIALYSER(agn)" + "Values(@agn)", conn);
DataTable dt = new DataTable();
if (dt.Rows.Count != -1)
{
if (cmd.Parameters.AddWithValue("@agn", SqlDbType.Int).Value is DBNull)
{
dDID = "1";
}
else
{
dDID = cmd.Parameters.AddWithValue("@agn", SqlDbType.Int).Value.ToString() + 1;
txtDID.Text = txtDID.Text.Replace(dDID.PadLeft(5), dDID.Length.ToString()) + dDID;
}
}
else
{
txtDID.Text = txtDID.Text.Replace(dDID.PadLeft(5), dDID.Length.ToString()) + dDID;
}
}
fmeStep1.Visible = false;
fmeStep2.Visible = true;
fmeStep3.Visible = false;
btnNext.Enabled = false;
button1.Enabled = false;
txtDID.Focus();
}
}
private void fmeStep3_Enter(object sender, EventArgs e)
{
}
private void btnSearch_Click(object sender, EventArgs e)
{
string dPatientID;
dPatientID=cboPatientID.GetItemText(cboPatientID.SelectedIndex);
Patient p=new Patient();
p.loadPatient(dPatientID);
}
private void button3_Click(object sender, EventArgs e)
{
string dFieldName = "";
Boolean vEmptyB=false;
if(cboManufacturer.SelectedIndex==-1)
{
vEmptyB = true;
dFieldName = "Please select a manufacturer";
}
else if(cboequipmentType.SelectedIndex==-1)
{
vEmptyB = true;
dFieldName = "Please select size of equipment";
}
else if(txtMFRRefNo.Text.ToString().Trim()=="")
{
vEmptyB = true;
dFieldName = "Equipment reference number should not be empty";
}
else if(txtMFRLotNo.Text.ToString().Trim()=="")
{
vEmptyB = true;
dFieldName = "Equipment lot number should not be empty";
}
else if(txtPVol.Text.ToString().Trim()=="")
{
vEmptyB = true;
dFieldName = "Packed volume of the equipment should not be empty";
}
else if(cboPatientID.SelectedIndex==-1)
{
vEmptyB = true;
dFieldName = "Please select a patient";
}
if (vEmptyB==true)
{
MessageBox.Show(dFieldName+"should not be empty");
return;
}
SqlConnection conn = new SqlConnection("Data Source=NPD-4\\SQLEXPRESS;Initial Catalog=Tuscan46;Integrated Security=true");
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd=new SqlCommand("Insert into DIALYSER(dialyserID,manufacturer,mfr_ref_number,mfr_lot_number,mfr_date,exp_date,start_date,packed_volume,dialyzer_size,patient_id,row_upd_date,user_id)"+"Values(@dialyserID,@manufacturer,@mfr_ref_number,@mfr_lot_number,@mfr_date,@exp_date,@start_date,@packed_volume,@dialyzer_size,@patient_id,GetDate(),@user_id)",conn);
cmd.Parameters.AddWithValue("@dialyserID",txtDID.Text);
cmd.Parameters.AddWithValue("@manufacturer",cboManufacturer.SelectedIndex);
cmd.Parameters.AddWithValue("@mfr_ref_number",txtMFRRefNo.Text);
cmd.Parameters.AddWithValue("@mfr_lot_number",txtMFRLotNo.Text);
cmd.Parameters.AddWithValue("@mfr_date",dtMFRDate.Value);
cmd.Parameters.AddWithValue("@exp_date",dtMFRexpDate.Value);
cmd.Parameters.AddWithValue("@start_date",dtMFRstartDate.Value);
cmd.Parameters.AddWithValue("@packed_volume",txtPVol.Text);
cmd.Parameters.AddWithValue("@dialyzer_size",cboequipmentType.SelectedIndex);
cmd.Parameters.AddWithValue("@patient_id",cboPatientID.GetItemText(cboPatientID.SelectedIndex));
cmd.Parameters.AddWithValue("@user_id",pUserID);
cmd.ExecuteNonQuery();
((MDIParent5)this.MdiParent).updateUserActivities(pUserID, 4,txtDID.Text + "Dialyzer detail was successfully assigned to patient="+cboPatientID.SelectedIndex+"");
conn.Close();
this.Close();
}
private void GetData(string ID)
{
DataTable dt = new DataTable();
SqlConnection conn = new SqlConnection("Data Source=NPD-4\\SQLEXPRESS;Initial Catalog=Tuscan46;Integrated Security=true");
conn.Open();
SqlCommand cmd = new SqlCommand("Select * from EQUIPMENTDATA where ManufacturerName='" + cboManufacturer.Text + "' and volume='" + cboequipmentType.Text + "' and packed_volume='" + txtPVol.Text + "'", conn);
SqlDataAdapter sda = new SqlDataAdapter(cmd);
sda.Fill(dt);
if (dt.Rows.Count > 0)
{
cboequipmentType.Text = dt.Rows[3]["volume"].ToString();
txtPVol.Text = dt.Rows[5]["packed_volume"].ToString();
}
conn.Close();
}
private void Dialyzer_Load(object sender, EventArgs e)
{
dtMFRDate.MinDate = dtMFRDate.Value;
dStepIndex=0;
fmeStep1.Visible=true;
fmeStep2.Visible=false;
fmeStep3.Visible=false;
}
private void txtDID_LostFocus(object sender, EventArgs e)
{
if (txtDID.Text.ToString().Trim() == "")
{
MessageBox.Show("Please enter Dialyzer ID to create", "DRRS", MessageBoxButtons.OK, MessageBoxIcon.Information);
txtDID.Focus();
}
else
{
checkDialyzerID();
}
}
private void checkDialyzerID()
{
SqlConnection conn = new SqlConnection("Data Source=NPD-4\\SQLEXPRESS;Initial Catalog=Tuscan46;Integrated Security=true");
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
DataTable dt = new DataTable();
cmd=new SqlCommand("Select * from DIALYSER where dialyserID="+txtDID.Text+"",conn);
if (dt.Rows.Count != -1)
{
MessageBox.Show("The DialyzerID already exists.Please try with another", "DRRS", MessageBoxButtons.OK, MessageBoxIcon.Information);
txtDID.Text = "";
txtDID.Focus();
txtDID.Tag = 1;
}
else
{
txtDID.Tag = 0;
button1.Enabled = true;
button1.Focus();
}
conn.Close();
}
private void dtMFRDate_ValueChanged(object sender, EventArgs e)
{
dtMFRstartDate.MinDate = Convert.ToDateTime("21/10/2013");
}
private void txtPVol_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsNumber(e.KeyChar))
{
e.Handled = true;
}
}
private void cboManufacturer_SelectedIndexChanged(object sender, EventArgs e)
{
GetData(cboManufacturer.SelectedItem.ToString());
}
private void cboequipmentType_SelectedIndexChanged(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection("Data Source=NPD-4\\SQLEXPRESS;Initial Catalog=Tuscan46;Integrated Security=true");
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
str = "Select distinct(volume) from EQUIPMENTDATA where Manufacturername='" + cboManufacturer.Text + "'";
cmd = new SqlCommand(str, conn);
SqlDataReader reader = cmd.ExecuteReader();
if (reader.Read())
{
txtPVol.Text = reader["packed_volume"].ToString();
}
conn.Close();
reader.Close();
}
private void button5_Click(object sender, EventArgs e)
{
this.Close();
}
}
}
Now here is the problem i am facing upon testing though entries process goes correctly till group box name:fmeStep1 afterwards i am not able get even controls of group box named:fmeStep2 and i dont know why? I want to see controls in fmeStep2 since in textbox named txtDID it shows me ID of Dialyzer that i am going to create and then in group box named:fmeStep3 i get to search for patient that i have to assign ID of Dialyzer to patient. I have tried fixing this problem many times but with no success. i am supposed to use StrokeScribe of version 4.3.2 only since it's my Boss orders and that i have to create barcode of type ean-13 in c# windows forms using StrokeScribe control with sql server 2008. Can anyone help me please where have i gone wrong in the coding. Can anyone guide me please. i was referred by Microsoft Developer Network community to ask my doubts regarding creation of barcode of type ean-13 in c# windows forms with sql server 2008. Can anyone help me please.?Any help or guidance would be greatly appreciated.
|
|
|
|
|
You should edit your message, it is almost unreadable as it stands. And try to identify exactly where the problem lies, rather than expecting others to work through code which they have never seen before.
Veni, vidi, abiit domum
|
|
|
|
|
what is northwind database and how to use it?
|
|
|
|
|
It's a sample database used in a lot of example code by Microsoft and others. You may use it as you wish to build code...
http://northwinddatabase.codeplex.com/[^]
I'm not questioning your powers of observation; I'm merely remarking upon the paradox of asking a masked man who he is. (V)
|
|
|
|
|
Come on! This is ultimate in lazy. You could have typed "What is the Northwind database" into any search engine and found the answer to that in under 30 seconds.
|
|
|
|
|
Shhhhhh... don't reveal our trade secret!!!
I'm not questioning your powers of observation; I'm merely remarking upon the paradox of asking a masked man who he is. (V)
|
|
|
|
|
Northwind Database is a sample database that is shipped along with Microsoft Access application. Basically, the database is about a company named "Northwind Traders". The database captures all the sales transactions that occurs between the company i.e. Northwind traders and its customers as well as the purchase transactions between Northwind and its suppliers.
It's true, you could just have googled for "what is northwind database[^]"
Clean-up crew needed, grammar spill... - Nagy Vilmos
|
|
|
|
|
Hello,
I'm collecting bitmaps from a camera like below:
private void LPRCamera2_OnNewFrame(object sender, ref Bitmap NewFrame)
{
while (LPR2List.Count >= LowCamSettings.LPR2FrameCount)
{
LPR2List[0].Dispose();
LPR2List.RemoveAt(0);
}
if (lpr2FrameIndex >= LowCamSettings.LPR2SkipCount)
{
LPR2List.Add(new Bitmap(NewFrame));
lpr2FrameIndex = 0;
}
else if (LowCamSettings.LPR2SkipCount > 0)
lpr2FrameIndex++;
}
I then take the list (LPR2List) and pass it to a new object that copies the list to a local variable. Like so:
for (int i = 0; i < LPR2List.Count; i++)
{
if (LPR2List[i] != null)
this.Plate2List.Add((Bitmap)LPR2List[i].Clone());
}
Every now and then i'm getting an error when copying telling me that the object is in use.
I haven't the slightest clue what I could be doing wrong. Any help would be greatly appreciated.
modified 3-Feb-14 13:54pm.
|
|
|
|
|
I suspect that this is a threading issue.
LPRCamera2_OnNewFrame appears to be an event handler and it may be raised on its own thread.
See this SO answer[^] for a good explanation.
|
|
|
|
|
I am new to programming and found a project online for designing a program that will randomly pull 4 cards from a 52 card deck. I want to prevent the same cards being repeated. I know there is a way to store it in an array to prevent repeating, just don't know how to do it. Any suggestions would be great.
|
|
|
|
|
The List type (List<PlayingCard>) will give you more flexibility. Use two lists:
List <PlayingCard> deck, drawn;
Where PlayingCard is the type for your cards.
When you draw a card, just delete that card from the deck list, and add it to the drawn list. It's as simple as that.
|
|
|
|
|
There are a few ways you could do this, but the simplest way is to store the cards in a list and then remove them when they have been selected. This isn't the best method to do this, but it is simple and easy to understand if you are new to coding. It's always best to start with the simplest solution that solves your problem.
|
|
|
|
|
There are a number of ways to do this, but the way I'd probably start is by creating a Card and Suit:
public enum Suit
{
Spades = 0,
Diamonds = 1,
Clubs = 2,
Hearts = 3,
}
public class Card
{
private int _Value;
public Suit Suit { get { return (Suit)(_Value / 13); } }
public int Value { get { return _Value % 13; } }
public Card(int value)
{
if (value < 0 || value >= 52)
{
throw new ArgumentException("Invalid Card : " + value);
}
_Value = value;
}
}
Then, it's a simple matter of creating the deck and shuffling it:
private List<Card> deck = new List<Card>();
private Random rand = new Random();
private Card GetNextCard(List<Card> deck)
{
if (deck.Count <= 0)
{
Enumerable.Range(0, 52).Select(c => new Card(c)).ToList();
deck = Shuffle(deck);
}
Card card = deck[0];
deck.RemoveAt(0);
return card;
}
private List<Card> Shuffle(List<Card> deck)
{
List<Card> shuffled = new List<Card>();
int cards = deck.Count;
for (int i = 0; i < cards; i++)
{
int index = rand.Next(deck.Count);
shuffled.Add(deck[index]);
deck.RemoveAt(index);
}
return shuffled;
}
Then just "peel off" the cards you want:
Card c1 = GetNextCard(deck);
Card c2 = GetNextCard(deck);
Card c3 = GetNextCard(deck);
Card c4 = GetNextCard(deck);
Those who fail to learn history are doomed to repeat it. --- George Santayana (December 16, 1863 – September 26, 1952)
Those who fail to clear history are doomed to explain it. --- OriginalGriff (February 24, 1959 – ∞)
|
|
|
|
|
This is what I am trying to do with this:
Write a C# program to simulate the drawing from a deck of 52 poker cards valued from 1 to 13 with 4 suits. One round of drawing consists of randomly pull any 4 cards from the 52-card deck. Therefore, the same card cannot appeared more than once. The program will perform 10,000 rounds of drawing and tallying the frequencies of the following possible results for the 4 cards pulled: (a)the 4 cards are having the same suit, (b)the 4 cards are from the 4 different suits, (c)the 4 cards are having the same value, (d)3 cards have the same value, (e)exactly 2 different pairs of 2 same-value cards, and (f)only 2 cards have the same value. Notice that (b) may occurred together with (c) - (f).
This is what I have so far:
using System;
namespace Draw4
{
class Program
{
static int[] ranData = new int[4];
static Random ran = new Random();
static int[] KS = new int[4];
static int GenerateRandomNum()
{
int cleanRanNum;
cleanRanNum = ran.Next(1, 53);
return cleanRanNum;
}
static void Main(string[] args)
{
int idx, ranNum;
int[] cdv = new int[4];
int[] cds = new int[4];
for (idx = 0; idx < 4; idx++) KS[idx] = 0;
{
Console.Write("Random numbers: \t");
for (idx = 0; idx < cdv.Length; idx++)
{
ranNum = GenerateRandomNum();
Console.Write(ranNum + ",\t");
cdv[idx] = ranNum % 13;
if (cdv[idx] == 0)
{
cds[idx] = ranNum / 13;
cdv[idx] = 13;
}
else
cds[idx] = ranNum / 13 + 1;
}
Array.Sort(cdv);
Console.Write("\nThe suits:\t\t");
PrintingSuits(cds);
Console.Write("\nThe values:\t\t");
foreach (int val in cdv) Console.Write(val + ",\t");
CountSuits(cds);
}
Console.Read();
}
static void CountSuits(int[] cds)
{
Array.Sort(cds);
int howManySuits = 0;
for (int j = 0; j < 3; j++)
if (cds[j] != cds[j + 1]) howManySuits++;
Console.WriteLine("\nThis hand has {0} suits", howManySuits + 1);
return;
}
static void PrintingSuits(int[] suit)
{
string s = " ";
foreach (int su in suit)
{
switch (su)
{
case 1: s = "H"; break;
case 2: s = "S"; break;
case 3: s = "D"; break;
case 4: s = "C"; break;
}
Console.Write(s + ",\t");
}
}
}
}
|
|
|
|
|
Ok, your method won't work to prevent numbers from repeating - which is why I created a list of Cards (but you could use int values instead). If you uncomment the line adding the card back to the bottom of the deck, you can simply have a loop which grabs the top four cards, prints them, and then calls the Shuffle method. It can then loop 10,000 times without problems.
The advantage of using a Card class is that it moves the complexity out of the "main" code: you can tell the Card to print itself, by adding a ToString override that returns "4 of Hearts" or "Ace of Spades" and just call Console.WriteLine:
for (idx = 0; idx < cdv.Length; idx++)
{
cdv[idx] = GetNext(deck);
Console.WriteLine(cdv[idx]);
}
So you main method consists of a little init code, then a loop, which calls shuffle, and then does the loop above.
Those who fail to learn history are doomed to repeat it. --- George Santayana (December 16, 1863 – September 26, 1952)
Those who fail to clear history are doomed to explain it. --- OriginalGriff (February 24, 1959 – ∞)
|
|
|
|
|
|
Okay so I have gotten the random numbers to stop. What about the conditions A-F? I know what I want to say, problem is how to say it and where to say it if that makes sense. Sorry if these noob questions are tedious. Just trying to learn.
|
|
|
|
|
(from my Windows Phone)
make some variables for the statistics you need, unit to 0
write a for loop for the 10,000 iterations
inside, shuffle the deck and draw 4 cards (1st 4 will do)
for each of the statistics check for the condition and increment the appropriate counter variable if true
after all 10,000 iterations, compute the frequencies and report them.
|
|
|
|
|
You could build it even simpler then a list.
bool [] deck = new bool [52];
the index is the card you draw and true is drawn, false is not drawn. .
A little more complex is to create a class Card which holds a boolean "drawn".
I personally only use Lists (and other collections) on dynamic arrays (those that can grow/shrink) and arrays on static arrays (like this case, because there are always 52 cards in a card game. This is just personal and there is nothing wrong in using a list.
|
|
|
|
|
Hey Guys,
Am a beginner to C# Programming, i have a requirement to create a smal project.
The project is to track the no of task done by individual. Few descriptions below.
1. Once a person is assigned with a Task, he need to enter the same in the front end tool.
2. This data will be getting captured in the backend (e.g: sql database) like Task#, Task Name, date, person name.
3. On completing the task, the person will enter the details in the tool.
4. So in the database we have the details for
a) No.of task done by induviual (e.g; in a month)
b) time taken to complete the task etc.
Planning to create front end of the tool in C#
Backend in SQL.
This frontend tool will be installed to all the users (e.g: 50 machines)
and the SQL server will be on Manager's machine, so that he will pull the report daily to see the status of the task assigned.
Planning to create the tool in Client-Server model.
is the above tool be done with visual C# + SQL ?
My Queries:
1. When i use windows application in C#, on linking the SQL database am hardcoding the SQL server details (e.g: i harcode Machine1\SQLEXPRESS ) but if at all am changing the server in future to Machine2\SQLEXPRESS do i need to recompile my Code again ?
|
|
|
|
|