在 C# 中比较文本文件数据和数据库记录

Compare text file data with database records in C#

我必须在数据库上创建 select 语句,然后将结果与 Visual Studio 中仅使用 C# 的文本文件进行比较。如果文本文件的值大于数据库中的记录,则程序 returns 来自文本文件的值,如果数据库记录的值更大,则程序 returns 值从数据库。结果被添加到列表中,成为 class WynikPorownania{}。用户在文件中键入产品索引和价值(在这种情况下,价值是它的可用性条件)。

例如:

文本文件是这样说的:

WYR_WR_CZ1=12

VIDIS_JIMU_BOX=3

REREK_KOTEK_T=5

在数据库中,这些索引与这样的可用性条件相关联

WYR_WR_CZ1=-1.0000

VIDIS_JIMU_BOX=-13.0000

REREK_KOTEK_T=0.0000

现在程序应该 return 列表中较大的值是 WynikPorownania{} class。

现在,我设法做了这么多:我从 select 查询中取出每条记录,并将其作为 class 放入列表中。我有一个函数可以检查指定索引的“standysp”(可用性条件),并将文本文件值分配给一个字符串。我认为它可以通过这个“zwr”函数和一个循环来完成,但我真的不知道从现在开始该去哪里。这是我现在的代码:

    using System;
using FirebirdSql.Data.FirebirdClient;
using System.Collections.Generic;
using System.Linq;
using System.IO;

namespace dokselect
{
    class indexstan
    {
        public string index;
        public double standysp;
    }

    class WynikPorownania
    {
        public string Indeks;
        public int Ilosc;
    }
    class Program
    {
        public static void Main()
        {
            ///////CONNECTION

            string conn = "database=C:/PCBiznes/BAZA/IXION2_LOGMAG.FB;user=SYSDBA;password=masterkey;DataSource=192.168.24.112;Port=3050";
            FbConnection myConnection = new FbConnection(conn);
            FbDataReader myReader = null;

            string sql = "select KARTOTEKA.indeks,STANMAG.standysp FROM kartoteka JOIN stanmag using(ID_KARTOTEKA);";
            FbCommand myCommand = new FbCommand(sql, myConnection);

            myConnection.Open();
            myReader = myCommand.ExecuteReader();

            ///////LIST lista1
            List<indexstan> lista1 = new List<indexstan>();
            double standysp;
            string index;
            while (myReader.Read())
            {
                index = myReader[0].ToString();
                standysp = Convert.ToDouble(myReader[1]);
                lista1.Add(new indexstan { index=index, standysp=standysp });
                //Console.WriteLine(myReader[0].ToString());
            }
            myConnection.Close();
            Console.WriteLine(lista1.Count);


            //RETURN STANDYSP FUNCTION
            double zwr(string myIndex)
            {
                var result = lista1.FirstOrDefault(lista1 => lista1.index == myIndex).standysp;
                return result;
            }
            zwr("EMPIS_DESKA_FASOLKA");

            //READ FROM TXT
            string path = "C:/Users/Praktykant/Documents/textdocs/dok1.txt";
            string plik = File.ReadAllText(path);
            //Console.WriteLine(plik);
            StreamReader objReader = new StreamReader(path);

            myConnection.Close();
        }
    }

你的意思是这样的?

var list = File.ReadAllLines(path).Select(line =>
{
    var tokens = line.Split("=");
    var index = tokens[0];
    var value = int.Parse(tokens[1]);
    return new WynikPorownania
    {
        Indeks = index,
        Ilosc = (int)Math.Max(value, zwr(index).standysp)
    }
}).ToList();

(根据文件的大小,StreamReader 会比 ReadAllLines 更好)

你快到了。

逐行提取文本文件,并计算更大的值

StringReader r = new StringReader(plik);
string line;
while((line = r.ReadLine()) != null)
{
    string index = line.Split('=')[0];
    string textValue = line.Split('=')[1];
    double biggerValue = Math.Max(
        zwr(index),
        double.Parse(textValue);

    Console.WriteLine($"{index} > {biggerValue}");
}