Diskuze: District() u String[]
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
public void LoadData()
{
if (Imports.Count() == 0)
{
cesta1 = System.IO.Path.Combine(cesta, @"Import.csv");
try
{
using (StreamReader sr = new StreamReader(cesta1, Encoding.Default))
{
HashSet<string> names = new HashSet<string>();
string s;
while ((s = sr.ReadLine()) != null)
{
string[] distribution = s.Split(';');
Import imp = new Import()
{
Customer = distribution[0],
Place_1 = distribution[1],
Place_2 = distribution[2],
Place_3 = distribution[3],
Place_4 = distribution[4],
Id = distribution[5],
Name = distribution[6],
SortingKey = distribution[7],
InvertoryNumber = distribution[8],
SerialNumber = distribution[9],
CordLength = distribution[10],
RevisionInterval = distribution[11],
TakenIntoEvidence = distribution[12],
Note = distribution[13],
Group = distribution[14],
ProtectionClass = distribution[15],
Category = distribution[16],
EquipmentClass = distribution[17],
ConnectionMethod = distribution[18],
UserValue_0_Name = distribution[19],
UserValue_0_Value = distribution[20],
UserValue_1_Name = distribution[21],
UserValue_1_Value = distribution[22],
UserValue_2_Name = distribution[23],
UserValue_2_Value = distribution[24],
UserValue_3_Name = distribution[25],
UserValue_3_Value = distribution[26],
UserValue_4_Name = distribution[27],
UserValue_4_Value = distribution[28],
UserValue_5_Name = distribution[29],
UserValue_5_Value = distribution[30],
UserValue_6_Name = distribution[31],
UserValue_6_Value = distribution[32],
UserValue_7_Name = distribution[33],
UserValue_7_Value = distribution[34],
UserValue_8_Name = distribution[35],
UserValue_8_Value = distribution[36],
UserValue_9_Name = distribution[37],
UserValue_9_Value = distribution[38],
MeasDate = distribution[39],
mPR = distribution[40],
mZK = distribution[41],
mRpe200mA = distribution[42],
mRpe10A = distribution[43],
mU10A = distribution[44],
mRiso500V = distribution[45],
mRiso250V = distribution[46],
mRiso100V = distribution[47],
mRisoIn_W = distribution[48],
mRisoW_PE = distribution[49],
mRisoIn_PE = distribution[50],
mIpe = distribution[51],
mIpeInv = distribution[52],
mIpeExt = distribution[53],
mIdif = distribution[54],
mIdifInv = distribution[55],
mIdifExt = distribution[56],
mId = distribution[57],
mIdDif = distribution[58],
mIsub = distribution[59],
mId_W = distribution[60],
mIdDif_W = distribution[61],
mP = distribution[62],
mPExt = distribution[63],
mS = distribution[64],
mSExt = distribution[65],
mcosPhi = distribution[66],
mI = distribution[67],
mU = distribution[68],
mIExt = distribution[69],
mTemp = distribution[70],
mRPM = distribution[71],
mUo_Vef = distribution[72],
mUo_Vpp = distribution[73],
mIm_S_n = distribution[74],
mIm_P_n = distribution[75],
mIm_P_p = distribution[76],
mIm_P_pz = distribution[77],
MeasInspectionNote = distribution[78],
MeasInspectionStatus = distribution[79],
MeasFunctTestNote = distribution[80],
MeasFunctTestStatus = distribution[81],
MeasMeasurementsNote = distribution[82],
MeasMeasurementsStatus = distribution[83],
MeasGlobalNote = distribution[84],
MeasGlobalStatus = distribution[85],
InspectorName = distribution[86],
InspectorSecondName = distribution[87],
InspectorLicense = distribution[88],
DeviceSerialNum = distribution[89],
DeviceType = distribution[90],
DeviceCalibrationNum = distribution[91],
DeviceCalibrationExpire = distribution[92],
SupplFirm = distribution[93],
SupplIC = distribution[94],
};
Imports.Add(imp);
if (names.Add(distribution[0]))
{
Customer cust = new Customer();
cust.NazevFirmy = distribution[0];
Customers.Add(cust);
}
Save();
ImportCount = Imports.Count();
}
}
}
catch (Exception ex)
{
WPFMessageBox.Show(ex.Message, "CHYBA!!!", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
else
WPFMessageBox.Show("Vyprázdněte data!", "CHYBA!!!", MessageBoxButton.OK, MessageBoxImage.Error);
}
Maros2470:20.9.2017 10:00
Super, funguje to. Mohl bys mi ještě poradit, jakým způsobem ověřit,
zda už databáze neobsahuje stejnou položku?
Bude to aplikace na evidenci zařízení a tak při obnově, nebo přidání
nových dat z CSV, by se zákazník mohl v databázi znásobit.
Díky
Variant je několik
- před každým uložením zákazníka poslat dotaz do DB na jeho existenci a uložit jen pokud neexistuje
- před importem načíst všechny zákazníky z DB, pak přidat a uložit jen ty, co ještě neexistují
- na úrovni DB zařídit uložení jen pokud neexistuje
Varianta 1 je náročná na čas, varianta 2 na paměť.
Jelikož nakonec požaduješ něco jiného než jsi psal v zadání, tak ta moje
úprava nebude ideální.
Maros2470:20.9.2017 13:38
Zkusil jsem to takto a zdá se , že to funguje:
var custName = Customers.Where(o => o.NazevFirmy == distribution[0]).Count();
Imports.Add(imp);
if (custName == 0)
{
if (names.Add(distribution[0]))
{
Customer cust = new Customer();
cust.NazevFirmy = distribution[0];
Customers.Add(cust);
}
}
Save();
Otázka je, zda je to správně?
Je to výše zmíněná varianta č. 1.
Pomocný HashSet names v mém návrhu hlídal jedinečnost jména zákazníka v
rámci jednoho importu. Když se pokaždé ptáš na existenci zákazníka v DB,
tak to není potřeba kontrolovat ještě jinak.
Imports.Add(imp);
var custName = Customers.Where(o => o.NazevFirmy == distribution[0]).Count();
if (custName == 0)
{
Customer cust = new Customer();
cust.NazevFirmy = distribution[0];
Customers.Add(cust);
}
Save();
Zobrazeno 10 zpráv z 10.