You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将TXT文件存入数据库并计算tCode使用占比的技术咨询

问题与解决方案

原始文件内容

first.txt的内容如下:

tCodeA;tCodeB;tCodeC
tCodeB;tCodeC
tCodeD;tCodeA
tCodeB

每行代表一个Package,Package包含的tCode以分号分隔。


问题1:将文本数据按行存储到数据库(列表/数组形式)

数据库表设计

以SQL Server为例,创建Packages表,用JSON格式存储tCode列表(若用PostgreSQL可直接使用数组类型):

CREATE TABLE Packages (
    Id INT IDENTITY(1,1) PRIMARY KEY,
    TCodeList NVARCHAR(MAX) NOT NULL -- 存储JSON数组,例如["tCodeA","tCodeB"]
);

C#实现代码

修改原读取文件方法,添加数据库插入逻辑,用using语句自动释放资源:

using System;
using System.IO;
using System.Data.SqlClient;
using Newtonsoft.Json; // 需安装Newtonsoft.Json NuGet包,或改用System.Text.Json

public void DbBuilder()
{
    string connectionString = "你的数据库连接字符串";
    string filePath = @"C:\first.txt";

    using (StreamReader sr = new StreamReader(filePath))
    {
        string line;
        while ((line = sr.ReadLine()) != null)
        {
            // 拆分每行tCode并转为字符串数组
            string[] tCodes = line.Split(';', StringSplitOptions.RemoveEmptyEntries);
            // 序列化为JSON字符串
            string tCodeJson = JsonConvert.SerializeObject(tCodes);

            // 插入数据库
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                conn.Open();
                string sql = "INSERT INTO Packages (TCodeList) VALUES (@TCodeList)";
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    cmd.Parameters.AddWithValue("@TCodeList", tCodeJson);
                    cmd.ExecuteNonQuery();
                }
            }
        }
    }
    Console.WriteLine("数据导入完成");
}

问题2:计算输入tCode的使用占比

逻辑说明

占比公式:(包含目标tCode的行数 ÷ 总行数) × 100%

  • 总行数:Packages表的总记录数
  • 匹配行数:查询TCodeList中包含目标tCode的记录数(通过JSON函数判断)

C#实现代码

编写方法接收用户输入,计算并返回占比:

using System;
using System.Data.SqlClient;

public decimal CalculateTCodeUsageRatio(string targetTCode)
{
    string connectionString = "你的数据库连接字符串";
    int totalRows = 0;
    int matchedRows = 0;

    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        conn.Open();

        // 获取总行数
        string countSql = "SELECT COUNT(*) FROM Packages";
        using (SqlCommand cmd = new SqlCommand(countSql, conn))
        {
            totalRows = (int)cmd.ExecuteScalar();
        }

        // 获取包含目标tCode的行数(SQL Server 2016+支持OPENJSON)
        string matchSql = @"
            SELECT COUNT(*) 
            FROM Packages 
            WHERE EXISTS (
                SELECT 1 
                FROM OPENJSON(TCodeList) 
                WHERE value = @TargetTCode
            )";
        using (SqlCommand cmd = new SqlCommand(matchSql, conn))
        {
            cmd.Parameters.AddWithValue("@TargetTCode", targetTCode);
            matchedRows = (int)cmd.ExecuteScalar();
        }
    }

    if (totalRows == 0)
        return 0;

    // 计算占比并保留两位小数
    return Math.Round((decimal)matchedRows / totalRows * 100, 2);
}

// 调用示例
public void RunRatioCalculation()
{
    Console.Write("请输入要查询的tCode(多个用逗号分隔):");
    string input = Console.ReadLine().Trim();
    string[] targetCodes = input.Split(',', StringSplitOptions.RemoveEmptyEntries);

    foreach (string code in targetCodes)
    {
        decimal ratio = CalculateTCodeUsageRatio(code);
        Console.WriteLine($"tCode {code} 的使用占比:{ratio}%");
    }
}

内容的提问来源于stack exchange,提问作者Mardibak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 06:05:13