I'd suggest to use
File.ReadAllLines Method (System.IO)[
^] to read data from text file.
[EDIT]
Your class needs some improvements:
According to our discussion, i've made some changes to the class:
public class Signal
{
private string sName = string.Empty;
private byte[] oData = new byte[]{};
public Signal(string _Name, string _data)
{
sName = _Name;
oData = _data.Select(x=>byte.Parse(x.ToString())).ToArray();
}
public string Name
{
get => sName;
set => sName = value;
}
public byte[] Data
{
get => oData;
set => oData = value;
}
public List<KeyValuePair<byte, int>> Map
{
get
{
List<KeyValuePair<byte, int>> map = new List<KeyValuePair<byte, int>>();
int i = 0;
int j = 0;
int l = oData.Length;
while(i<l)
{
int k = 0;
j = i;
while(oData[i]==oData[j])
{
k++;
j++;
if(j==l) break;
}
KeyValuePair<byte, int> kvp = new KeyValuePair<byte, int>(oData[i], k);
map.Add(kvp);
i = j-1;
i++;
}
return map;
}
}
public override string ToString()
{
return string.Format("{0}\n{1}\n", sName, string.Join("", oData));
}
}
Usage:
void Main()
{
string[] lines = File.ReadAllLines("FullFileName.txt");
var names = lines
.Where(x=>x.Trim().StartsWith("S"))
.ToList();
var datas = lines
.Where(x=>!x.Trim().StartsWith("S") && x.Trim()!=string.Empty)
.ToList();
List<Signal> signals = names.Zip(datas,
(n, d)=> new Signal(n, d))
.ToList();
foreach(Signal s in signals)
{
Console.WriteLine("{0} '{1}'=>[{2}]", s.Name, string.Join("", s.Data), string.Join("|", s.Map.Select(x=>x.Key + ":" + x.Value)));
}
}
Sample output:
Signal 1 '00000000111101010'=>[0:8|1:4|0:1|1:1|0:1|1:1|0:1]
Signal 2 '1010'=>[1:1|0:1|1:1|0:1]
Signal 3 '0111100001110'=>[0:1|1:4|0:4|1:3|0:1]
Good luck!