我正在使用下面的for循环将字节数组的内容写入屏幕和文本文件。数组中的第3列与属性有关,而不是显示属性编号,我想添加一个带有给定数字的switch语句,并用文本交换它。
foreach (ManagementObject FailData in FailDataSet)
{
Byte[] data =(Byte[])FailData.Properties["VendorSpecific"].Value;
var sb = new StringBuilder();
for (int i = 0; i < data[0] - 1; i++)
{
for (int j = 0; j < 12; j++)
{
richTextBox2.Text = richTextBox2.Text + data[i * 12 + j] + "\t";
sb.Append(data[i * 12 + j] + "\t");
}
richTextBox2.Text = richTextBox2.Text + "\n";
sb.AppendLine();
}
String title = "Unknw\tUnknw\tAttribute\tStatus\tUnknw\tValue\tWorst\tRaw\t\tUnknw\r\n";
File.WriteAllText(@"C:\Users\Desktop\WriteText1.txt", title + sb.ToString();
}
答案 0 :(得分:0)
这是一种方法:
foreach (ManagementObject FailData in FailDataSet)
{
Byte[] data =(Byte[])FailData.Properties["VendorSpecific"].Value;
var sb = new StringBuilder();
for (int i = 0; i < data[0] - 1; i++)
{
for (int j = 0; j < 12; j++)
{
string text = data[i * 12 + j];
if (j == 2)
text = GetText(text);
sb.Append(text + "\t");
}
sb.AppendLine();
}
richTextBox2.Text = sb.ToString();
String title = "Unknw\tUnknw\tAttribute\tStatus\tUnknw\tValue\tWorst\tRaw\t\tUnknw\r\n";
File.WriteAllText(@"C:\Users\Desktop\WriteText1.txt", title + sb.ToString());
}
请注意,最后一行代码中缺少右括号。
功能可能是这样的:
private string GetText(string numberText)
{
int number;
if (!int.TryParse(numberText, out number))
return string.Empty; // or "invalid" or whatever
switch (number)
{
case 1: return "one";
case 2: return "two";
default: return "other";
}
}
答案 1 :(得分:0)
如果我理解正确,byte[]
的格式如下:
- [0]:数据行数(加1,真的吗?)
- [1] .. [12]:第一行数据
- [13] .. [24]:第二行数据
- 等
如果是这样,那么我要指出的第一件事就是你的程序中有一个错误。您正在索引从索引0处的元素开始的数据,但当然具有行计数。您应该在计算的索引中加1,以便考虑到这一点。
另外,虽然数据中的行数实际上可能是行数加1,但是对于行计数器循环比较需要减1,似乎更可信的是,这只是代码中的另一个错误。 / p>
考虑到这些事情,听起来像你想要的是这样的事情:
foreach (ManagementObject FailData in FailDataSet)
{
Byte[] data =(Byte[])FailData.Properties["VendorSpecific"].Value;
var sb = new StringBuilder();
for (int i = 0; i < data[0]; i++)
{
for (int j = 0; j < 12; j++)
{
int dataIndex = i * 12 + j + 1;
string textForColumn = j == 2 ?
GetAttributeText(data[dataIndex]) : data[dataIndex].ToString();
richTextBox2.Text = richTextBox2.Text + textForColumn + "\t";
sb.Append(textForColumn + "\t");
}
richTextBox2.Text = richTextBox2.Text + "\n";
sb.AppendLine();
}
String title = "Unknw\tUnknw\tAttribute\tStatus\tUnknw\tValue\tWorst\tRaw\t\tUnknw\r\n";
File.WriteAllText(@"C:\Users\Desktop\WriteText1.txt", title + sb.ToString();
}
其中:
static string GetAttributeText(byte value)
{
switch (value)
{
case 0:
return "First Attribute Text";
case 1:
return "Second Attribute Text";
case 2:
return "Third Attribute Text";
default:
return "<unknown attribute>";
}
}
请注意,意见因switch
声明的可读性而异。以上也可以使用字典来实现:
static readonly Dictionary<byte, string> _byteToAttributeText =
new Dictionary<byte, string>()
{
{ 0, "First Attribute Text" },
{ 1, "Second Attribute Text" },
{ 2, "Third Attribute Text" },
};
static string GetAttributeText(byte value)
{
string text;
if (!_byteToAttributeText.TryGetValue(value, out text))
{
return "<unknown attribute>";
}
return text;
}