使用StreamReader C#搜索文件中的特定数据,然后将其写入控制台窗口
我来找你,因为我已经用尽了自己的搜索谷歌和尝试我自己的方法 我有一个由存储在文本文件中的所有字符串组成的结构。我希望用户能够在文本文件中按客户编号搜索客户帐户,然后程序应返回客户信息 下面是我为程序创建的非工作搜索方法。我进入此方法的阶段,因为它允许我输入要搜索的客户号码,但按enter键后,我没有得到任何回报: 如果你能告诉我这段代码有什么问题,我将非常感激和宽慰使用StreamReader C#搜索文件中的特定数据,然后将其写入控制台窗口,c#,search,streamreader,C#,Search,Streamreader,我来找你,因为我已经用尽了自己的搜索谷歌和尝试我自己的方法 我有一个由存储在文本文件中的所有字符串组成的结构。我希望用户能够在文本文件中按客户编号搜索客户帐户,然后程序应返回客户信息 下面是我为程序创建的非工作搜索方法。我进入此方法的阶段,因为它允许我输入要搜索的客户号码,但按enter键后,我没有得到任何回报: 如果你能告诉我这段代码有什么问题,我将非常感激和宽慰 //SEARCHING BY CUSTOMER NUMBER static void FindCustN
//SEARCHING BY CUSTOMER NUMBER
static void FindCustNo(CustomerStruct[] CustomerDeats)
{
String NumberSearch;
bool CustomerNumberMatch = false;
Console.Clear();
begin:
try
{
Console.WriteLine("\t\tPlease enter a customer number: ");
NumberSearch = Console.ReadLine();
}
catch
{
Console.WriteLine("Failed. Please try again.");
goto begin;
}
while (!CustomerNumberMatch)
{
var pathToCust = @"..\..\..\Files\Customer.txt";
using (StreamReader sr = new StreamReader(pathToCust))
{
RecCount = 0;
CustomerDeats[RecCount].CustomerNo = sr.ReadLine();
if (CustomerDeats[RecCount].CustomerNo == NumberSearch)
{
CustomerNumberMatch = true;
CustomerDeats[RecCount].CustomerNo = sr.ReadLine();
Console.WriteLine(CustomerDeats[RecCount].CustomerNo);
CustomerDeats[RecCount].Surname = sr.ReadLine();
Console.WriteLine(CustomerDeats[RecCount].Surname);
CustomerDeats[RecCount].Forename = sr.ReadLine();
Console.WriteLine(CustomerDeats[RecCount].Forename);
CustomerDeats[RecCount].Street = sr.ReadLine();
Console.WriteLine(CustomerDeats[RecCount].Town);
CustomerDeats[RecCount].Town = sr.ReadLine();
Console.WriteLine(CustomerDeats[RecCount].Town);
CustomerDeats[RecCount].DOB = sr.ReadLine();
Console.WriteLine(CustomerDeats[RecCount].DOB);
}
RecCount++;
if (RecCount > 15)
{
Console.WriteLine("No One Found");
}
}
}
Console.ReadKey();
}
似乎与其他人刚才遇到的问题相同:
为什么每次迭代都要创建一个新的StreamReader
试试这个:
var pathToCust = @"..\..\..\Files\Customer.txt";
using (StreamReader sr = new StreamReader(pathToCust) {
while (!CustomerNumberMatch)
{
...
似乎与其他人刚才遇到的问题相同:
为什么每次迭代都要创建一个新的StreamReader
试试这个:
var pathToCust = @"..\..\..\Files\Customer.txt";
using (StreamReader sr = new StreamReader(pathToCust) {
while (!CustomerNumberMatch)
{
...
似乎与其他人刚才遇到的问题相同:
为什么每次迭代都要创建一个新的StreamReader
试试这个:
var pathToCust = @"..\..\..\Files\Customer.txt";
using (StreamReader sr = new StreamReader(pathToCust) {
while (!CustomerNumberMatch)
{
...
似乎与其他人刚才遇到的问题相同:
为什么每次迭代都要创建一个新的StreamReader
试试这个:
var pathToCust = @"..\..\..\Files\Customer.txt";
using (StreamReader sr = new StreamReader(pathToCust) {
while (!CustomerNumberMatch)
{
...
请尝试在数组中而不是文件中查找。以下代码行将从文件返回字符串数组
string[] records = System.IO.File.ReadAllLines("filePath");
foreach (var record in records)
{
string[] fields = record.Split(' ');//space
if (customerIdToFind == fields[0])
{
Console.WriteLine("Customer ID:" + fields[0]);
Console.WriteLine("Customer Name:" + fields[1]);
}
}
不要对大文件执行此操作,它会将整个内容加载到内存中。所以StreamReader总是很好的 请尝试在数组中而不是在文件中查找。以下代码行将从文件返回字符串数组
string[] records = System.IO.File.ReadAllLines("filePath");
foreach (var record in records)
{
string[] fields = record.Split(' ');//space
if (customerIdToFind == fields[0])
{
Console.WriteLine("Customer ID:" + fields[0]);
Console.WriteLine("Customer Name:" + fields[1]);
}
}
不要对大文件执行此操作,它会将整个内容加载到内存中。所以StreamReader总是很好的 请尝试在数组中而不是在文件中查找。以下代码行将从文件返回字符串数组
string[] records = System.IO.File.ReadAllLines("filePath");
foreach (var record in records)
{
string[] fields = record.Split(' ');//space
if (customerIdToFind == fields[0])
{
Console.WriteLine("Customer ID:" + fields[0]);
Console.WriteLine("Customer Name:" + fields[1]);
}
}
不要对大文件执行此操作,它会将整个内容加载到内存中。所以StreamReader总是很好的 请尝试在数组中而不是在文件中查找。以下代码行将从文件返回字符串数组
string[] records = System.IO.File.ReadAllLines("filePath");
foreach (var record in records)
{
string[] fields = record.Split(' ');//space
if (customerIdToFind == fields[0])
{
Console.WriteLine("Customer ID:" + fields[0]);
Console.WriteLine("Customer Name:" + fields[1]);
}
}
不要对大文件执行此操作,它会将整个内容加载到内存中。所以StreamReader总是很好的 试试这个
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section,
string key, string def, StringBuilder retVal,
int size, string filePath);
/// <summary>
/// read value from given section and key
/// </summary>
/// <param name="Section">string</param>
/// <param name="Key">string</param>
/// <returns>string</returns>
public string IniReadValue(string Section, string Key)
{
StringBuilder temp = new StringBuilder(255);
int i = GetPrivateProfileString(Section, Key, "", temp,
255, this.path);
return temp.ToString();
}
试试这个
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section,
string key, string def, StringBuilder retVal,
int size, string filePath);
/// <summary>
/// read value from given section and key
/// </summary>
/// <param name="Section">string</param>
/// <param name="Key">string</param>
/// <returns>string</returns>
public string IniReadValue(string Section, string Key)
{
StringBuilder temp = new StringBuilder(255);
int i = GetPrivateProfileString(Section, Key, "", temp,
255, this.path);
return temp.ToString();
}
试试这个
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section,
string key, string def, StringBuilder retVal,
int size, string filePath);
/// <summary>
/// read value from given section and key
/// </summary>
/// <param name="Section">string</param>
/// <param name="Key">string</param>
/// <returns>string</returns>
public string IniReadValue(string Section, string Key)
{
StringBuilder temp = new StringBuilder(255);
int i = GetPrivateProfileString(Section, Key, "", temp,
255, this.path);
return temp.ToString();
}
试试这个
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section,
string key, string def, StringBuilder retVal,
int size, string filePath);
/// <summary>
/// read value from given section and key
/// </summary>
/// <param name="Section">string</param>
/// <param name="Key">string</param>
/// <returns>string</returns>
public string IniReadValue(string Section, string Key)
{
StringBuilder temp = new StringBuilder(255);
int i = GetPrivateProfileString(Section, Key, "", temp,
255, this.path);
return temp.ToString();
}
您是否尝试过调试并观察了发生的情况?出了什么问题等?看看你的结构,找到一个有客户编号的文件。在控制台中键入该编号并调试。当它在应该匹配它的行上迭代时会发生什么?@aeliusd不幸的是,我对编程比较陌生,当我进行“主”调试时,没有错误。这就是我调试技能的高度。对断点不太熟悉,尤其是在理解断点返回的结果时。为什么不能发布数据文件示例?如果不查看文件,很难从不工作的代码中找到答案。当我插入断点时,它神奇地工作了,我现在更困惑了。您是否尝试过调试并观察了发生的情况?出了什么问题等?看看你的结构,找到一个有客户编号的文件。在控制台中键入该编号并调试。当它在应该匹配它的行上迭代时会发生什么?@aeliusd不幸的是,我对编程比较陌生,当我进行“主”调试时,没有错误。这就是我调试技能的高度。对断点不太熟悉,尤其是在理解断点返回的结果时。为什么不能发布数据文件示例?如果不查看文件,很难从不工作的代码中找到答案。当我插入断点时,它神奇地工作了,我现在更困惑了。您是否尝试过调试并观察了发生的情况?出了什么问题等?看看你的结构,找到一个有客户编号的文件。在控制台中键入该编号并调试。当它在应该匹配它的行上迭代时会发生什么?@aeliusd不幸的是,我对编程比较陌生,当我进行“主”调试时,没有错误。这就是我调试技能的高度。对断点不太熟悉,尤其是在理解断点返回的结果时。为什么不能发布数据文件示例?如果不查看文件,很难从不工作的代码中找到答案。当我插入断点时,它神奇地工作了,我现在更困惑了。您是否尝试过调试并观察了发生的情况?出了什么问题等?看看你的结构,找到一个有客户编号的文件。在控制台中键入该编号并调试。当它在应该匹配它的行上迭代时会发生什么?@aeliusd不幸的是,我对编程比较陌生,当我进行“主”调试时,没有错误。这就是我调试技能的高度。对断点不太熟悉,尤其是在理解断点返回的结果时。为什么不能发布数据文件示例?如果不查看文件,很难从不工作的代码中找到答案。当我插入断点时,它神奇地工作了,我现在更困惑了(好:)--它不起作用的原因是每次从
StreamReader
读取一行后,就会创建一个新的StreamReader
,它会从头开始读取文件。因此,您总是反复地只读取文件的第一行。好:)--它不起作用的原因是每次从StreamReader
中读取一行后,都会创建一个新的StreamReader
,它将从头开始读取文件。因此,您总是反复地只读取文件的第一行。好:)--它不起作用的原因是每次从StreamReader
读取一行后,都会创建一个新的StreamReader
来读取文件