【问题标题】:How to split a string by a specific char if the line ONLY contains that specific delimiter如果该行仅包含该特定分隔符,如何按特定字符拆分字符串
【发布时间】:2016-05-11 14:09:26
【问题描述】:

我将文本文件中的所有行都变成了这样的 var:

var text = File.ReadAllLines(pathToFile);

我现在需要用这个分隔符“/”来分割该文本。 但是该文本可以在任何地方包含“/”,因为它填充了 SQL 语句,所以我只需要在“/”在该行中“单独”时进行拆分,这样我就不会意外拆分命令。

我认为我应该使用正则表达式?我对他们不方便? 有什么方法可以让text.Split() 满足我的需要吗?

这是文件:

ALTER TABLE ORC
    ADD MercadoInt  VARCHAR2(1)
    ADD Coef_KrMo   NUMBER(20,10)
    ADD Coef_KrMt   NUMBER(20,10)
    ADD Coef_KrEq   NUMBER(20,10)
    ADD Coef_KrSb   NUMBER(20,10)
    ADD Coef_KrGb   NUMBER(20,10)
    ADD Coef_MDEmp  NUMBER(20,10)
    ADD Coef_MDLoc  NUMBER(20,10)
    ADD Abrv_MDLoc  VARCHAR2(10)
    ADD Dsc_MDLoc   VARCHAR2(50)
    ADD Arred_MDLoc VARCHAR2(1)
    ADD Arred_NDecs NUMBER(1)
/
UPDATE Orc set MercadoInt='N', Coef_KrMo=1, Coef_KrMt=1, Coef_KrEq=1, Coef_KrSb=1, Coef_KrGb=1, Coef_MDEmp=1, Coef_MDLoc=1, Abrv_MDLoc='', Dsc_MDLoc='', Arred_MDLoc='N', Arred_NDecs=0 WHERE MercadoInt IS NULL
/

输出应该是一个只包含如下命令的列表:

ALTER TABLE ORC
        ADD MercadoInt  VARCHAR2(1)
        ADD Coef_KrMo   NUMBER(20,10)
        ADD Coef_KrMt   NUMBER(20,10)
        ADD Coef_KrEq   NUMBER(20,10)
        ADD Coef_KrSb   NUMBER(20,10)
        ADD Coef_KrGb   NUMBER(20,10)
        ADD Coef_MDEmp  NUMBER(20,10)
        ADD Coef_MDLoc  NUMBER(20,10)
        ADD Abrv_MDLoc  VARCHAR2(10)
        ADD Dsc_MDLoc   VARCHAR2(50)
        ADD Arred_MDLoc VARCHAR2(1)
        ADD Arred_NDecs NUMBER(1)

UPDATE Orc set MercadoInt='N', Coef_KrMo=1, Coef_KrMt=1, Coef_KrEq=1, Coef_KrSb=1, Coef_KrGb=1, Coef_MDEmp=1, Coef_MDLoc=1, Abrv_MDLoc='', Dsc_MDLoc='', Arred_MDLoc='N', Arred_NDecs=0 WHERE MercadoInt IS NULL

注意:
当我在行只包含'/'时说拆分是因为如果语句包含'/'它也会将它分开,这是不可能的,所以我只能在行只包含'/'时拆分它

【问题讨论】:

  • 显示其中一些行以及至少其中之一的所需结果
  • 不清楚你的意思是什么只有当'/'它是“单独”时才拆分你在内存中有一个行数组。如果一行只包含分隔符你想分割什么?
  • 查看Regex.Split(),您可以在其中为 alone / 定义模式
  • 什么sql命令包含/
  • @Steve 通过示例查看更新的答案

标签: c# text split


【解决方案1】:

如果你改用File.ReadAllText(pathToFile),你可以这样做:

var result = text.Split(new[]{"\n/"}, StringSplitOptions.RemoveEmptyEntries);

这应该会生成一个包含文件中两个命令的列表。

【讨论】:

  • 为什么会有RealAllText 和RealllAllLines 的区别?它会给我同样的输出,对吧?
  • 不,ReallAllLines 会给你一个字符串数组,而RealAllText 会给你一个完整的文件作为一个字符串。
  • 但是如果我做 string text = File.ReadAllLines() 它只返回一个字符串。
  • @LikeIfYouCaredAboutMyName ReadAllLines 返回一个字符串数组而不是字符串。
【解决方案2】:

也许使用正则表达式有更好的解决方案,但以下也应该有效。

foreach (String line in text){
    if (line.Count(f => f == '/') == 1){
        String[] myArray = line.Split('/')
    }
}

【讨论】:

    猜你喜欢
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-19
    • 2015-12-18
    • 2013-12-06
    • 2022-01-04
    相关资源
    最近更新 更多