【问题标题】:Parse a text file using batch script and remove the first 2 characters from each line使用批处理脚本解析文本文件并从每行中删除前 2 个字符
【发布时间】:2023-03-14 19:33:01
【问题描述】:

我一直在尝试从 Teradata 快速导出实用程序生成的文本文件中解析数据。 数据如下所示:

 Type2LRF|84|249
 Job3|86|327
 StageTOStageBackUp|85|327

当我检查了最初存在的垃圾字符的字符数时,它是 2。 我一直在尝试解析文本文件以删除前 2 个字符并从中生成一个新的文本文件。

新文件应如下所示:

Type2LRF|84|249
Job3|86|327
StageTOStageBackUp|85|327

我正在尝试添加前 2 个字符,但它们在上面的块中没有正确显示。

我使用的Teradata快速导出代码是:

.LOGTABLE Informatica_Test.JobControlExport_log;  
.LOGON server_name/dbc,dbc;  
   DATABASE Informatica_Test;  
   .BEGIN EXPORT SESSIONS 2;  
      .EXPORT OUTFILE "data.txt" 
      MODE RECORD FORMAT TEXT;
     
SELECT ((TRIM((COALESCE(J.JobName,''))))
 ||'|'||
(TRIM((COALESCE(JC.JobControlID,''))))
 ||'|'||
(TRIM((COALESCE(JC.Success_Source_Rows,''))))
)(TITLE '') from
Informatica_Test.JobControl JC
JOIN Informatica_Test.Job J 
ON J.JobID = JC.JobID
JOIN Informatica_Test.BatchControl BC 
ON BC.BatchControlID = JC.BatchCtrlID
where BC.BatchID = 1 -- This will be a parameter   
and BC.EndDatetime = (select max(EndDatetime) from Informatica_Test.BatchControl);

   
   .END EXPORT;
.LOGOFF;
@echo off
setlocal enabledelayedexpansion
break>test.txt
for /F "tokens=*" %%A in (data.txt) do (
 set line=%%A
 echo !line:~2! >>test.txt
)

我已尝试使用上述代码删除 2 个字符。

【问题讨论】:

  • 您导出的数据是 VARCHAR,因此前两个字节是字符串的二进制长度。与其尝试在客户端上对其进行修补,不如使用 TPT(Teradata Parallel Transporter)导出为分隔文本。或者更好的是,由于导出的行数看起来非常少,请使用 BTEQ 导出(在报告格式/字段模式下)。
  • @Fred,如果你能把它写下来作为答案会很有帮助。
  • 谢谢@Fred。您已经准确地指出了根本原因并且它有所帮助。

标签: windows batch-file teradata fastexport


【解决方案1】:

您导出的数据是 VARCHAR,因此前两个字节是字符串的二进制长度。 不要解析/修复 FastExport 输出文件,而是使用不同的工具来导出数据。

对于大量行,使用 Teradata Parallel Transporter (TPT) 导出为分隔文本(无需显式连接或事后更改文件。

对于少量的行,使用带有 REPORT 格式的BTEQ EXPORT

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    相关资源
    最近更新 更多