【问题标题】:converting input fields from text to columns in FoxPro or SQL在 FoxPro 或 SQL 中将输入字段从文本转换为列
【发布时间】:2017-05-08 08:34:36
【问题描述】:

我在 FoxPro 中有一组输入数据。其中一个字段,即 grp 字段,是一个连接字符串,

其中的各个部分由竖线符号“|”分隔。以下是它可以采用的值的一些示例:

grp:

ddd|1999|O|%

bce|%

aaa|2009|GON|固定|大|MAE|1

bbb|PAL|N|固定|MAE|1

aaa|SMK|O|固定|MAE|1|1

ddd|ERT|O|%

eef|%|N|%

afd|2000|O|%

afd|200907|O|%

swq|%|O|%

%

我想编写一个查询,将上面的数据分成单独的字段,并将它们输出到另一个 sql 表,其中分隔的决定因素是管道符号。以前两行为例,输出应为

记录 1:

字段1 = ddd 字段2 = 1999 字段3 = O 字段4 = %

记录 2: Field1 = bce Field2 = % Field3 没有值 Field4 没有值

事先不知道数据中管道符号的最大数量是多少。在上面的示例中,它是 6,在记录 3 和 5 中。

真的可以这样做吗?

【问题讨论】:

  • 请仅使用相关的产品标签,不要使用每个包含sql 字母的标签。

标签: sql visual-foxpro foxpro


【解决方案1】:

您可以创建一个游标并使用“追加自”将数据追加到其中(另一种方法是使用 2 行,一个用于行,另一个用于列数据)。例如将您的数据用作文本变量:

Local lcSample, lcTemp, lnFields, ix
TEXT to m.lcSample noshow
ddd|1999|O|%
bce|%
aaa|2009|GON|Fixed|big|MAE|1
bbb|PAL|N|Fixed|MAE|1
aaa|SMK|O|Fixed|MAE|1|1
ddd|ERT|O|%
eef|%|N|%
afd|2000|O|%
afd|200907|O|%
swq|%|O|%
%
ENDTEXT

lnFields = 0
Local Array laText[1]
For ix=1 To Alines(laText, m.lcSample)
    m.lnFields = Max(m.lnFields, Occurs('|', m.laText[m.ix]))
Endfor

#Define MAXCHARS 20 && max field width expected

Local Array laField[m.lnFields,4]
For ix = 1 To m.lnFields
    m.laField[m.ix,1] = 'F' + Ltrim(Str(m.ix))
    m.laField[m.ix,2] = 'C'
    m.laField[m.ix,3] = MAXCHARS
    m.laField[m.ix,4] = 0
Endfor

lcTemp = Forcepath(Sys(2015)+'.txt', Sys(2023))
Strtofile(m.lcSample, m.lcTemp)

Create Cursor myData  From Array laField
Append From (m.lcTemp) Delimited With "" With Character "|"
Erase (m.lcTemp)
Browse

但是,在现实世界中,这听起来不太现实。您应该对前面的数据有所了解。

此外,您还可以使用 FoxyClasses 的导入工具来获取数据。它允许您选择分隔符、映射列等,但需要一些开发人员干预数据的最终处理。

【讨论】:

    【解决方案2】:

    ALINES() 函数使解析变得容易。您可以依次将其应用于每一行。 @Cetin 已经向您展示了如何找出您需要多少个字段。

    【讨论】:

      【解决方案3】:

      我不得不对一些客户数据做一些非常相似的事情。他们提供了一个字段,该字段是一个以空格分隔的数字列表,需要将其提取到单列数字中以匹配报价。最初,我将其转储到一个文本文件中,然后将其重新导入到一个新表中。类似于以下内容:

      create table groups ; 
          (group1 c(5), group2 c(5), group3 c(5), group4 c(5), group5 c(5)) 
      
      select grp from infile to file grps.tmp noconsole plain  
      
      select groups
      append from grps.tmp delimited with "" with character "|"
      

      【讨论】:

        猜你喜欢
        • 2017-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-20
        • 2016-04-02
        • 2021-05-25
        • 1970-01-01
        相关资源
        最近更新 更多