截断数据列c#

本文关键字:数据 | 更新日期: 2023-09-27 18:11:17

我用的是c#。

我有ODBC DSN连接,我带入DataTable。第一栏是"BRANCH"

的例子:

BRANCH-----| TYPE-----| ID-----|
1V--------------|   R-----------|   ZZ
1A--------------|   R-----------|   ZZ
3---------------|   W-----------|   VW
2V--------------|   R-----------|   VW
1---------------|   R-----------|   NI
4---------------|   I-----------|   MA
3B--------------|   R-----------|   SZ

我想改变第一列,使它只包含第一个字符。

它看起来像这样。

BRANCH-----| TYPE-----| ID-----|
1---------------|   R-----------|   ZZ
1---------------|   R-----------|   ZZ
3---------------|   W-----------|   VW
2---------------|   R-----------|   VW
1---------------|   R-----------|   NI
4---------------|   I-----------|   MA
3---------------|   R-----------|   SZ

截断数据列c#

我试了很多例子,但是我不能使它工作

根据您需要使用表达式创建列,您可以在表达式中使用substring。请参阅dataccolumn上的MSDN信息。表达

我相信第一个字符在索引1

dcUnits.Expression = string.Format("SUBSTRING({0}, 1, 1)+''+{1}+''+{2}", "BRANCH", "TYPE", "ID");

我使用RegEx来获得所有的数字,所以如果你有一个两位数,它将工作。如果不工作,尝试索引号From: row["BRANCH"] To: row[0]

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Text.RegularExpressions;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("BRANCH", typeof(string));
            dt.Columns.Add("TYPE", typeof(string));
            dt.Columns.Add("ID", typeof(string));
            dt.Rows.Add(new object[] { "1V", "R", "ZZ"});
            dt.Rows.Add(new object[] { "1A", "R", "ZZ"});
            dt.Rows.Add(new object[] { "3", "W", "V"});
            dt.Rows.Add(new object[] { "2V", "R", "VW"});
            dt.Rows.Add(new object[] { "1", "R", "NI"});
            dt.Rows.Add(new object[] { "4", "I", "MA"});
            dt.Rows.Add(new object[] { "1B", "R", "SZ"});
            foreach (DataRow row in dt.AsEnumerable())
            {
                row["BRANCH"] = Regex.Match(row["BRANCH"].ToString(), "''d+").Value.ToString();
            }
        }
    }
}
​

遍历DataTable并重置每行中的BRANCH值。

        foreach (DataRow row in dt.Rows)
        {
            row["BRANCH"] = row["BRANCH"].ToString().Substring(0,1);
            Console.WriteLine(row["BRANCH"].ToString());
        }

这是一个完整的工作版本与您提供的数据:https://dotnetfiddle.net/pJzeAO

注意:我的重置代码与之前的答案不同,它将其重置为"第一个字符"而不是数值。我相信"第一个字符"是你在问题中要求的。

两个选项都有。使用适合你情况的东西。