мой вопрос касается чтения файла .db c и внутреннего блока текста, который повторяется в той же форме, примерно так:
BO_ 199 WheelInfoIEEE: 8 ABS
SG_ WheelSpeedFR : 32|32@1- (1,0) [0|1300] "1/min" GearBox,EngineControl
SG_ WheelSpeedFL : 0|32@1- (1,0) [0|1300] "1/min" GearBox,EngineControl
BO_ 200 WheelInfo: 8 ABS
SG_ WheelSpeedRR : 48|16@1+ (0.02,0) [0|1300] "1/min" GearBox
SG_ WheelSpeedRL : 32|16@1+ (0.02,0) [0|1300] "1/min" GearBox
SG_ WheelSpeedFR : 16|16@1+ (0.02,0) [0|1300] "1/min" GearBox
SG_ WheelSpeedFL : 0|16@1+ (0.02,0) [0|1300] "1/min" GearBox
BO_ 1020 GearBoxInfo: 1 GearBox
SG_ EcoMode : 6|2@1+ (1,0) [0|1] "" DashBoard,EngineControl
SG_ ShiftRequest : 3|1@1+ (1,0) [0|0] "" EngineControl
SG_ Gear : 0|3@1+ (1,0) [1|5] "" ABS,DashBoard,EngineControl
Я могу прочитать, если есть только один блок, и сохранить в БД, если больше, чем один, я получаю все данные в два или три раза. Я пишу код в C#, вот код:
//MESSAGE ==> BO_
var tmessageid = d.Where(g => g.Contains("BO_ "));
string[] _messageid;
//SIGNAL ==> SG_
var signal = d.Where(g => g.Contains("SG_ "));
string[] _signal;
foreach (var item in tmessageid)
{
_messageid = item.Split(new string[] { "BO_ " }, StringSplitOptions.None);
message_id = _messageid[1]; //BO_ 199 WheelInfoIEEE: 8 ABS
string[] sentenses = message_id.Split(' ');
messageId = sentenses[0];
message_name = sentenses[1].Replace(":", "");
foreach (var itemsignal in signal)
{
_signal = itemsignal.Split(new string[] { "SG_ " }, StringSplitOptions.None);
signal_id = _signal[1];//SG_ WheelSpeedFR : 32|32@1- (1,0) [0|1300] "1/min" GearBox,EngineControl
string[] sentensessignal = signal_id.Split(' ');
signal_name = sentensessignal[0];
signal_start_bit = sentensessignal[2];
signal_start_bit = signal_start_bit.Split('|')[0];
string signallength = sentensessignal[2];
signal_lenght = signallength.Split('|', '@')[1];
//Add to DB
try
{
DataRow r = rimacDataSet.Tables["podaci"].NewRow();
r["imefile"] = ime_file;
r["nodes"] = nodes;
r["messageid"] = messageId;
r["messagename"] = message_name;
r["signalname"] = signal_name;
r["signalstartbit"] = signal_start_bit;
r["signallength"] = signal_lenght;
rimacDataSet.Tables["podaci"].Rows.Add(r);
podaciTableAdapter.Update(rimacDataSet);
}
catch (Exception ex)
{
MessageBox.Show("Error in add new .dbc file!", ex.Message.ToString());
}
}
}
Любая помощь, как читать блок за блоком:
BO_ 199 WheelInfoIEEE: 8 ABS
SG_ WheelSpeedFR : 32|32@1- (1,0) [0|1300] "1/min" GearBox,EngineControl
SG_ WheelSpeedFL : 0|32@1- (1,0) [0|1300] "1/min" GearBox,EngineControl
From this I need to get 2 rows in DB:
199 WheelInfoIEEE 8 WheelSpeedFR 32 32
199 WheelInfoIEEE 8 WheelSpeedFL 0 32
Любые советы, что я сделал wornog в моем коде. БЛАГОДАРНОСТЬ.