IBM大型机论坛索引
 
登录
 
IBM大型机论坛索引 大型机:搜索 IBM Mainframe论坛:常见问题解答 寄存器
 

上传和替换数据文件中的换行符


IBM大型机论坛 -> JCL& VSAM
发表新话题   回复主题
查看上一个主题 :: 查看下一个主题  
作者 信息
拉斐尔·隆戈(Rafael Longo)

新的用户


已加入:2007年7月21日
帖子:33
地点:巴西圣保罗坎皮纳斯

发布发表:2007年7月25日星期三凌晨2:07
引用回复

我需要将Windows中的数据文件上传到mvs,然后,使用teradata fastload实用程序将数据加载到数据库中。

目前,我正在使用Windows ftp实用程序将文件上传到作业创建的数据集中。

当我将其快速加载到Teradata中时,就会出现问题。只要记录没有任何带有换行符(CR / LF)的文本字段,所有数据都将正确加载到表中。 当记录确实具有CR / LF时,它将分成多个记录,每个记录都从CR / LF字符后的第一个字符开始.

我需要的是一种避免打破记录的方法。也许我可以用空格或类似的东西替换CR / LF。
回到顶部
查看用户资料 发送私信
威廉·汤普森

全球主持人


已加入:2006年11月18日
帖子:3156
所在地:亚利桑那州图森

发布发表:2007年7月25日星期三凌晨3:18
引用回复

如何使用FTP中使用的代码页的修改版本?
回到顶部
查看用户资料 发送私信
超级

全球主持人


已加入:2004年4月26日
帖子:4650
地点:美国北卡罗来纳州罗利

发布发表:2007年7月25日,星期三,上​​午7:15
引用回复

我糊涂了。使用术语,EBCDIC MVS数据集不包含“换行符(CR / LF)”。

该数据是否以二进制传输模式上传,并且是否以ASCII格式存储在数据集中?
回到顶部
查看用户资料 发送私信
迪克·谢勒

主持人荣誉


已加入:2006年11月23日
帖子:19245
位置:矩阵内部

发布发表:2007年7月25日,星期三,上​​午8:08
引用回复

您好,

在windoes系统上如何创建文件?
回到顶部
查看用户资料 发送私信
拉斐尔·隆戈(Rafael Longo)

新的用户


已加入:2007年7月21日
帖子:33
地点:巴西圣保罗坎皮纳斯

发布发表:2007年7月25日,星期三,下午6:32
引用回复

感谢您的答复。

它是使用DTS导出实用程序从SQL Server数据库导出的文件。
这是一个ASCII文件,而不是EBCDIC。

这是ftp命令:

的openmvs
用户用户名密码
放置file.txt DSNAME
退出


威廉,您能详细说明一下代码页解决方案吗?我不明白你的想法。

请告诉我您是否需要更多信息...
回到顶部
查看用户资料 发送私信
超级

全球主持人


已加入:2004年4月26日
帖子:4650
地点:美国北卡罗来纳州罗利

发布发表:2007年7月25日,星期三,下午6:44
引用回复

我将使用带有ALTSEQ参数的SORT将不需要的字符转换为所需的字符。这些论坛上有很多例子。
回到顶部
查看用户资料 发送私信
迪克·谢勒

主持人荣誉


已加入:2006年11月23日
帖子:19245
位置:矩阵内部

发布发表:2007年7月25日,星期三7:18 pm
引用回复

您好,

我相信您想确定为什么只有某些记录具有cr / lf并在sqlserver导出中将其消除-您可能必须进行一些稍微的修改。 cr / lf是否总是以相同的位移出现?如果您在基于Win的系统上查看文件,导出文件是否具有cr / lf?

将文件放在大型机上之后,再尝试加载之前,文件是什么样的? cr / lf在哪里?可能是有些记录比创建的文件长,并且被“包裹”而不是异常结束。

如果它们不是引起换行而只是“垃圾”并且不占用额外的字节,则可以按照之前的建议替换它们。就个人而言,当我发送文件时,请确保我知道所有内容的来源-以后保存惊喜。
回到顶部
查看用户资料 发送私信
拉斐尔·隆戈(Rafael Longo)

新的用户


已加入:2007年7月21日
帖子:33
地点:巴西圣保罗坎皮纳斯

发布发表:2007年7月25日,星期三,8:52 pm
引用回复

谢谢大家的帮助...

Dick--

是的,当我在Windows系统上查看文件时,cr / lf在那里。

不,他们永远不在同一个地方。在某些记录中,有一些导出的字段并非全部具有cr / lfs。

当我在mvs中查看文件时,记录被包装在cr / lfs所在的位置。

数据集的记录长度正确,并且与上载文件中所有记录的长度匹配。 (它是一个固定长度的文件)。因此,我们可以假设这不是问题。

超级

谢谢你的提示。我将看一下SORT命令。这里有人建议我也去看看SYNCSORT ...你怎么看?
回到顶部
查看用户资料 发送私信
拉斐尔·隆戈(Rafael Longo)

新的用户


已加入:2007年7月21日
帖子:33
地点:巴西圣保罗坎皮纳斯

发布发表:2007年8月21日,星期二,上午12:30
引用回复

好,朋友们,

我创建了一个Visual Basic程序,该程序会在文件上传之前删除不需要的cr / lfs。一切正常。

但是现在我被要求在MVS中进行所有处理。因此,我正在寻找创建程序在Mainframe环境中执行此操作的最佳方法。就像我在Windows环境中使用VB一样。

我试图寻找一种使用SORT和ALTSEQ的方法,就像SUPERK建议的那样,但我做不到。如果有人可以提供一段代码或链接来说明我,我将非常感激。

我当时在想,也许我可以使用一种语言来创建程序(例如COBOL,Assembler,REXX等)。你们有什么感想?哪种语言更适合呢?

任何建议/评论将不胜感激...

非常感谢!
拉斐尔·隆戈(Rafael Longo)
回到顶部
查看用户资料 发送私信
迪克·谢勒

主持人荣誉


已加入:2006年11月23日
帖子:19245
位置:矩阵内部

发布发表:2007年8月21日,星期二,上午1:10
引用回复

您好,

您是否能够确定为什么这些cr / lf出现在dts出口的输出中?我相信,如果您可以确定发生这种情况的原因并消除出口中的原因,那么您将遥遥领先。

在大型机上处理将更加繁琐,因为ftp已经在“破坏”数据并创建新记录。

将“损坏的”记录上载到主机后,主机文件的属性是什么?如果上载的记录分为2个大型机记录,cr / lf是“第一”记录的最后2个字节吗?

您可以张贴这些损坏的大型机记录中的一两个,以便我们看到“中断”吗?如果它们包含敏感数据,则可以在发布前替换敏感内容。
回到顶部
查看用户资料 发送私信
拉斐尔·隆戈(Rafael Longo)

新的用户


已加入:2007年7月21日
帖子:33
地点:巴西圣保罗坎皮纳斯

发布发表:2007年8月21日,星期二,凌晨1:24
引用回复

感谢您的答复,迪克。

关于样本,由于我正在上传文件的更正版本,因此现在还没有。我将上传未更正的版本,如果您仍然想查看,我可以稍后发布...

但是cr / lfs的来源是存储在SQL Server上的自由文本字段。我们对此无能为力。用户可以自由地在此字段上换行,我们必须对其进行处理。

“第一”记录的最后2个字节不是CR / LF。当您说FTP已经损坏记录时,您是对的。

有没有办法(让它变得乏味.. icon_wink.gif )编写程序来重新组成这些记录?在这种情况下,您会建议使用哪种编程语言?
回到顶部
查看用户资料 发送私信
迪克·谢勒

主持人荣誉


已加入:2006年11月23日
帖子:19245
位置:矩阵内部

发布发表:2007年8月21日,星期二,凌晨1:52
引用回复

别客气。

还有几个问题-不一定需要答案,但可能有助于澄清。

最大拆分​​会导致2条记录吗?还是由一个“中断”记录创建的记录数量无法预测?

cr和lf始终保持相同的记录,还是它们也可能分裂?

数据中是否有某些东西可以标识“记录的开始”,“记录的结束”,或者可以作为文字直接放在导出中?

如果您可以轻松地发布示例,则可能会有帮助,但可能没有必要。

如果我要这样做,我很可能会使用COBOL,因为更多的人可以轻松地维护它-我的工作是确保仅因为我是某件事的作者,我才不会“永远”地依赖它。 icon_smile.gif

上载后的文件的dcb信息和“更正”的文件的dcb信息也将有所帮助。

您可以尝试执行的一个简单操作是确保大型机文件的lrecl更长(更长) icon_smile.gif ),然后查看“中断”是否停止。由于cr / lf不在“中断”记录的末尾,因此可能是lrecl导致了中断-如前所述。

用户最初放置在数据中的cr / lf控件应该怎么办?
回到顶部
查看用户资料 发送私信
拉斐尔·隆戈(Rafael Longo)

新的用户


已加入:2007年7月21日
帖子:33
地点:巴西圣保罗坎皮纳斯

发布发表:2007年8月21日,星期二2:32上午
引用回复

引用:
最大拆分​​会导致2条记录吗?还是由一个“中断”记录创建的记录数量无法预测?

有不可预测的记录数。这是一个自由文本字段,因此用户可能输入了任意数量的换行符。并且每个都会产生一个新记录。

引用:
cr和lf始终保持相同的记录,还是它们也可能分裂?

我认为cr / lfs不在拆分的数据集中。

引用:
数据中是否有某些东西可以标识“记录的开始”,“记录的结束”,或者可以作为文字直接放在导出中?

我想我不需要它,因为该文件的固定长度为2660字节。

引用:
如果您可以轻松地发布示例,则可能会有帮助,但可能没有必要。

迪克,我明天早上去做。第一件事

引用:
您可以尝试执行的一个简单操作是确保大型机文件的lrecl更长(更长),并查看“ break”是否停止。由于cr / lf不在“中断”记录的末尾,因此可能是lrecl导致了中断-如前所述。

该lrecl是正确的。精确地为2660字节。当它断裂时,由于CR / LF而在此之前断裂。

引用:
上载后的文件的dcb信息和“更正”的文件的dcb信息也将有所帮助。

什么是DCB?如何使用? (我正在使用TSO / ISPF)

引用:
用户最初放置在数据中的cr / lf控件应该怎么办?

它们应该替换为空格或消失。

引用:
如果我要这样做,我很可能会使用COBOL,因为更多的人可以轻松地维护它

好的,但是,除了易于维护之外,COBOL是最适合此类任务的语言吗? (处理数据集中的记录)

您能否提供一个代码样本,做一些类似的事情? (我不是任何大型机语言的专家……)
回到顶部
查看用户资料 发送私信
斯托多拉斯

活跃的成员


已加入:2007年6月13日
帖子:632
地点:威斯康星州

发布发表:2007年8月21日,星期二,上午7:30
引用回复

ASCII码->EBCDIC正在FTP服务器中发生。如果您没有在FTP流中发出BI命令,它将被转换为带有CR / LF的EBCDIC,从而强制中断大型机上的新记录。我认为,如果向MVS FTP服务器发出正确的“ SITE”命令,这样它就不会在CR / LF上中断,您也许可以解决此问题。我会调查的。

如果您压缩文件,将其二进制传输并在大型机上解压缩,记录仍在CR / LF上中断,会发生什么?

有时,在大型机上运行的要求不是一个明智的业务决策。

<RANT - not to hijack>
举个例子。我们的大型机上只有COBOL(REXX也是如此,但只有Sysprogs对此一无所知)。我希望他们能启用C ++和Java编译器。我去过25年以上的主管说:“这个过程将在大型机上进行。”因此,我不得不从COBOL查询LDAP服务器。为此,我在程序中创建了一个TSO环境,然后读取输入文件并从COBOL程序中调用TCP / IP gldsearch应用程序。因为它在大型机上并与COBOL配对,所以10,000条记录的运行时间已延长到2个小时。如果我们在z / OS中启用了Java,它知道如何与LDAP通讯并且可以与目标MS SQL Server通讯(我希望是这样),那么这显然会更快。

当前过程
(每天在MF上)生成输入文件
(在MF上夜间)对输入数据进行重复数据删除,读取重复数据文件,按1进行LDAP查询,然后将输出文件写入ftp到lan [2小时10,000个记录,大部分在查询步骤中]
(LAN上的N)从MF加载SQL Server读取文件,触发大型机作业
(在MF上为N)将电子邮件发送到服务器以触发向客户发出新的网络发票的通知

在我看来,还是更好(共享得太少)。
(每天在MF上)生成输入文件
(夜间在MF上)排序至重复数据删除,ftp至局域网
(LAN上的N)从MF重复数据删除读取文件,查询LDAP并直接插入SQL Server,触发大型机作业
(在MF上为N)将电子邮件发送到服务器以触发向客户发出新的网络发票的通知

</RANT>

我愿意就改进该流程提出建议。


我现在来看一下FTP SITE命令。 icon_smile.gif
回到顶部
查看用户资料 发送私信
迪克·谢勒

主持人荣誉


已加入:2006年11月23日
帖子:19245
位置:矩阵内部

发布发表:2007年8月21日,星期二,上午7:33
引用回复

你好拉斐尔,

引用:
COBOL是最适合这种任务的语言吗?

从我的角度来看,实际上不受业务规则驱动的最适合代码的语言是作者喜欢的任何一种语言。时间是,我只会在汇编器中编写这样的代码,但是时间已经改变了。您的“业务需求”可能是删除不必要的cr / lf,但对我而言,这更多是实用功能而不是业务规则实现。

引用:
(我不是任何大型机语言的专家……)
我怀疑您会想要借用一个-如果不是一个完整的专家,至少有点流利。

最好查看“破损”记录的样本。我尚不清楚中断发生的时间(如果短记录的中断不是cr / lf。如果您可以在导出中强制使用“记录开始”值和“记录结束”值,它可能使代码更容易修复记录。

我早上看。 。 。 。
回到顶部
查看用户资料 发送私信
斯托多拉斯

活跃的成员


已加入:2007年6月13日
帖子:632
地点:威斯康星州

发布发表:2007年8月21日,星期二,上午7:45
引用回复

迪克

这是CR / LF素材上发生的情况。希望这有道理...

来自PC端的文件,我将逗号分隔。
码:

F1,F2,F3a,F3b,F3c,F3d,F3e,F4
F1,F2,F3a CR / LF F3b F3c F3d CR / LF F3e,F4
F1,F2,F3a F3b CR / LF F3c F3d CR / LF F3e,F4
F1,F2,F3a F3b F3c CR / LF F3d CR / LF F3e,F4


FTP到大型机后的结果。 -表示评论未记录
码:

--rec 1来自PC
F1,F2,F3,F4
-来自PC的REC 2
F1,F2,F3a
F3b F3c F3d
F3e,F4
--rec 3来自PC
F1,F2,F3a,F3b
F3c F3d
F3e,F4
-来自PC的REC 4
F1,F2,F3a,F3b,F3c
F3d
F3e,F4
回到顶部
查看用户资料 发送私信
斯托多拉斯

活跃的成员


已加入:2007年6月13日
帖子:632
地点:威斯康星州

发布发表:2007年8月21日,星期二,上午7:45
引用回复

PC上的Whoops rec 2应该是这个
码:

F1,F2,F3a,F3b,F3c,F3d,F3e,F4
回到顶部
查看用户资料 发送私信
斯托多拉斯

活跃的成员


已加入:2007年6月13日
帖子:632
地点:威斯康星州

发布发表:2007年8月21日,星期二,上午7:47
引用回复

拍我需要上床睡觉。...REC 1,不是REC 2 WOW

请更正这些帖子中的第一篇,并删除第二篇2

谢谢
回到顶部
查看用户资料 发送私信
拉斐尔·隆戈(Rafael Longo)

新的用户


已加入:2007年7月21日
帖子:33
地点:巴西圣保罗坎皮纳斯

发布发表:2007年8月21日,星期二,下午6:30
引用回复

icon_biggrin.gif

感谢您的插图stodolas。这正是发生的情况。

我也想说明一下,迪克:

记录结构
-----------
职位1至12:员工姓名
位置13至23:缺陷类型
位置24至280:根本原因
LRECL = 280字节

Windows中的文本文件:
---------------------------
-记录1
拉斐尔·隆戈(Rafael Longo)Process缺少要求。 CR / LF要求不准确。
-记录2
拉斐尔·隆戈(Rafael Longo)Non-ProcessSetup问题
---------------------------------

将文件通过FTP传输到Mainframe之后,我们有以下内容
MVS上的数据集:
-------------------
--Rec1
拉斐尔·隆戈(Rafael Longo)Process缺少要求。
--Rec2
要求不准确。
--Rec3
拉斐尔·隆戈(Rafael Longo)Non-ProcessSetup问题
----------------------

但是这是我们应该拥有的:
-------------------
--Rec1
拉斐尔·隆戈(Rafael Longo)Process缺少要求。要求不准确。
--Rec2
拉斐尔·隆戈(Rafael Longo)Non-ProcessSetup问题
----------------------

这正是发生的情况。迪克,这使事情更清楚了吗?让我知道您是否需要更多信息...

有什么新想法吗?

关于编程语言,就像您所说的,我们应该使用最合适的语言,不仅要考虑语言的资源,还要考虑我们的能力。但是,即使我不熟练使用汇编程序或Cobol之类的语言,我也可以学习并完成它。但是,由于我要进行一些研究(包括从比我更流利的人们那里获得帮助),因此我需要首先选择哪种语言是实现此目标的最佳方法。这就是为什么我试图确定Cobol是否真的是最好的方法(这里有些与Cobol合作的人告诉我,这不是执行此类任务的最明确的语言)。

Stodolas在大型机上提到了有关C ++的一些知识。例如,这将是完美的,因为我更精通C ++。 Java也会很棒。是否可以在大型机上使用这些语言?如果是,我需要设置它们吗?与Cobol相比,Rexx和Assembler如何执行此任务?

Stodolas,您是否在SITE命令上找到任何可以避免FTP记录中断的内容?

感谢所有帮助人员,希望我不要让你厌倦我... icon_wink.gif
回到顶部
查看用户资料 发送私信
斯托多拉斯

活跃的成员


已加入:2007年6月13日
帖子:632
地点:威斯康星州

发布发表:2007年8月21日,星期二,下午6:39
引用回复

我看着SITE命令,什么也没找到。

其他一些注意事项:
如果您传输二进制文件,则不会有任何记录中断,并且您必须自己使用选择的语言将ASCII转换为EBCDIC,然后自行拆分为不同的记录。

对于Java或C ++,您需要确保编译器可用。除此之外,我不知道。除了大型机上的Cobol之外,人们谈论的不多。

我的意见对提出要求的人并不重要,但是在小型服务器上进行预处理并将记录保持在一起可能是最好的解决方案。由于您在此处输出ASCII,因此只有在本机编码为本地的系统上使用ASCII才有意义。
回到顶部
查看用户资料 发送私信
拉斐尔·隆戈(Rafael Longo)

新的用户


已加入:2007年7月21日
帖子:33
地点:巴西圣保罗坎皮纳斯

发布发表:2007年8月21日,星期二,下午6:57
引用回复

如果我将文件传输为二进制文件,您可以提供有关如何进行转换的任何指导吗?

我认为这是一个有趣的解决方案,因为使用数据集可以很好地打破记录,因为数据集的LRECL恰好是记录的大小(固定长度)。之后,我只是不知道如何转换为“文本”(ascii或ebcdic?)...
回到顶部
查看用户资料 发送私信
斯托多拉斯

活跃的成员


已加入:2007年6月13日
帖子:632
地点:威斯康星州

发布发表:2007年8月21日,星期二,7:02 pm
引用回复

您需要加载一个转换表,其中包含ASCII中所有十六进制值以及EBCDIC中您希望其匹配的十六进制值。然后遍历每个二进制记录进行转换。那样可能会很糟糕,因为您基本上需要检查二进制字符串中的每个字符并将其替换。在这方面的处理时间和CPU可能不是很漂亮。


码:

ASCII码  EBCDIC
65     C1
66     C2
67     C3
32     40
等等
回到顶部
查看用户资料 发送私信
拉斐尔·隆戈(Rafael Longo)

新的用户


已加入:2007年7月21日
帖子:33
地点:巴西圣保罗坎皮纳斯

发布发表:2007年8月21日,星期二,7:08 pm
引用回复

是的,我的每月文件大小约为2.5 GB ...

即使让我问:您将如何在您的环境中执行此翻译脚本?您将使用cobol程序,还是仅使用JCL就能做到?

如果我的要求不高,您可以为此提供代码示例吗? (不需要工作或任何东西……只是草稿供我用作开始研究的指导)
回到顶部
查看用户资料 发送私信
斯托多拉斯

活跃的成员


已加入:2007年6月13日
帖子:632
地点:威斯康星州

发布发表:2007年8月21日,星期二,7:49 pm
引用回复

嗯..您也许可以通过带有转换表的DFSORT来完成此操作,但是我不确定。我不确定弗兰克是否观看了论坛的这一部分。
回到顶部
查看用户资料 发送私信
超级

全球主持人


已加入:2004年4月26日
帖子:4650
地点:美国北卡罗来纳州罗利

发布发表:2007年8月21日,星期二,7:51 pm
引用回复

我对其他人一无所知,但是我想看到十六进制转储格式的几行原始ASCII数据的实际样本。东西没有加起来。
回到顶部
查看用户资料 发送私信
查看上一个主题 :: :: 查看下一个主题  
发表新话题   回复主题 查看书签
所有时间均为格林尼治标准时间+ 6小时
论坛索引 -> JCL& VSAM 转到页面 1, 2, 3  下一页

 


类似主题
话题 论坛 回覆
该主题已锁定:您无法编辑帖子或回复。 将匹配的记录写入输出文件 DFSORT / ICETOOL 11
没有新帖 比较文件记录计数百分比... DFSORT / ICETOOL 4
没有新帖 比较两个文件以查找位置/日期... 同步排序 2
没有新帖 加载D ...时二级索引错误 IMS数据库/ DC 2
没有新帖 将文件从PD转换为显示... 同步排序 4
搜索我们的论坛:


回到顶部