对于其他人来说,这应该很容易。我正在阅读一个包含一些值的文本文件,并将这些值分解为单个值...等等等等。基本上我需要知道如何从我的文本文件中的第二行检索值。我的代码已经从第一行读取了第一个值。我如何重复这个过程,因为我将有20-30个不同的行,它们具有不同的值?
namespace oSnaps
{
public partial class Form1 : Form
{
// read the settings file and disect the value of OSMODE
private String settingsPath = "N:\\C3D Support\\MySettings.txt";
private enum oSnap : int
{
none = 0, // =0
endpoint = 1 << 0, // =1
midpoint = 1 << 1, // =2
center = 1 << 2, // =4
node = 1 << 3, // =8
quadrant = 1 << 4, // =16
intersection = 1 << 5, // =32
insertion = 1 << 6, // =64
perpendicular = 1 << 7, // =128
tangent = 1 << 8, // =256
nearest = 1 << 9, // =512
apparentIntersection = 1 << 11, // =2048
extension = 1 << 12, // =4096
parallel = 1 << 13, // =8192
defaultmode = 1 << 0, // =1
editmode = 1 << 1, // =2
commandactive = 1 << 2, // =4
commandmode = 1 << 3, // =8
menumode = 1 << 4, // =16
}
public Form1()
{
InitializeComponent();
LoadSettings();
}
private void LoadSettings()
{
if (!System.IO.File.Exists(settingsPath))
{
try
{
StreamWriter file = new StreamWriter(settingsPath);
file.WriteLine("OSNAPS,0" + Environment.NewLine + "Mouse Value,0");
file.Close();
}
catch
{
MessageBox.Show("MySettings.txt was unaccessable. Contact the IT Department if you see this message.");
return;
}
}
string[] lines = File.ReadAllLines(settingsPath);
SetOsnaps(lines);
}
private void SetOsnaps(string[] lines)
{
try
{
// First line = lines[0]
int val = Convert.ToInt32(lines[0].Split(',')[1]);
if ((val & 1) == 1) { cbxEndpoint.Checked = true; }
if ((val & 2) == 2) { cbxMidpoint.Checked = true; }
if ((val & 4) == 4) { cbxCenter.Checked = true; }
if ((val & 8) == 8) { cbxNode.Checked = true; }
if ((val & 16) == 16) { cbxQuadrant.Checked = true; }
if ((val & 32) == 32) { cbxIntersection.Checked = true; }
if ((val & 64) == 64) { cbxInsertion.Checked = true; }
if ((val & 128) == 128) { cbxPerpendicular.Checked = true; }
if ((val & 256) == 256) { cbxTangent.Checked = true; }
if ((val & 512) == 512) { cbxNearest.Checked = true; }
if ((val & 2048) == 2048) { cbxApparent.Checked = true; }
if ((val & 4096) == 4096) { cbxExtension.Checked = true; }
if ((val & 8192) == 8192) { cbxParallel.Checked = true; }
// Second line = lines[1]
int mval = Convert.ToInt32(lines[1].Split(',')[1]);
if ((val & 1) == 1) { cbxRcDefault.Checked = true; }
if ((val & 2) == 2) { cbxRcEdit.Checked = true; }
if ((val & 4) == 4) { cbxRcCommandActive.Checked = true; }
if ((val & 8) == 8) { cbxRcCommand.Checked = true; }
if ((val & 16) == 16) { cbxRcMenu.Checked = true; }
}
文本文件示例:
val,768
mval,12
答案 0 :(得分:1)
鉴于上下文(只有两行的短文件),您只需从文件中读取所有行,然后将所有行传递给您的函数
private void LoadSettings()
{
if (!System.IO.File.Exists(settingsPath))
{
try
{
System.IO.File.WriteAllText(settingsPath, "OSNAPS,0" + Environment.NewLine + "Mouse Value,0");
}
catch
{
MessageBox.Show("MySettings.txt was unaccessable. Contact the IT Department if you see this message.");
return;
}
}
string[] lines = System.IO.File.ReadAllLines(settingsPath);
SetOsnaps(lines);
}
private void SetOsnaps(string[] lines)
{
try
{
// First line = lines[0]
int val = Convert.ToInt32(lines[0].Split(',')[1]);
if ((val & 1) == 1) { cbxEndpoint.Checked = true; }
if ((val & 2) == 2) { cbxMidpoint.Checked = true; }
if ((val & 4) == 4) { cbxCenter.Checked = true; }
if ((val & 8) == 8) { cbxNode.Checked = true; }
if ((val & 16) == 16) { cbxQuadrant.Checked = true; }
if ((val & 32) == 32) { cbxIntersection.Checked = true; }
if ((val & 64) == 64) { cbxInsertion.Checked = true; }
if ((val & 128) == 128) { cbxPerpendicular.Checked = true; }
if ((val & 256) == 256) { cbxTangent.Checked = true; }
if ((val & 512) == 512) { cbxNearest.Checked = true; }
if ((val & 2048) == 2048) { cbxApparent.Checked = true; }
if ((val & 4096) == 4096) { cbxExtension.Checked = true; }
if ((val & 8192) == 8192) { cbxParallel.Checked = true; }
// Second line = lines[1]
int mval = Convert.ToInt32(lines[1].Split(',')[1]);
if ((val & 1) == 1) { cbxRcDefault.Checked = true; }
if ((val & 2) == 2) { cbxRcEdit.Checked = true; }
if ((val & 4) == 4) { cbxRcCommandActive.Checked = true; }
if ((val & 8) == 8) { cbxRcCommand.Checked = true; }
if ((val & 16) == 16) { cbxRcMenu.Checked = true; }
}
答案 1 :(得分:0)
你试过阅读有关从文件中读取的内容吗?似乎不是:/
bool isFirst = true;
using (var reader = new StreamReader(filePath))
{
while(!reader.EndOfStream)
{
if (isFirst)
{
isFirst = false;
continue;
}
SetOsnaps(reader.ReadLine());
}
}