我可以将数据导出到文本文件,但文本文件中的格式不好。例如,当字段值中包含空格时 - 它在文件中包含一个新行。
示例数据:
846438828 | 10121803 || HEIN | KATIE | 270 ||卵石
CREEK | DR-|||美国| GA | 30605 || 7天| 1 | 2 |
842486060 | 1012 || GUNTER | LEWELL | 230 || MCDUFFIE | DR |||雅典| GA | 30605 | 7065430640 | FRI-SUN | 1 | 2 |
889388948 | 101205 ||周| J D | 183 || MELL | ST |||雅典| GA | 30605 | 7065481437 | SUNONLY | 1 | 2 |
字段streetname" PEBBLE" CREEK的值,但在报告中看起来像:
卵石
CREEK
为什么会这样?
def var v-copies as inte no-undo.
def var v-phone as char format "x(16)" no-undo.
def var v-loc as char no-undo.
def var v-file as char format "x(30)" no-undo.
def var v-demoid as char format "x(20)" no-undo.
def var v-email as char format "x(30)" no-undo.
def var v-hostname as char format "x(20)" no-undo.
def var v-RouteIDs as char no-undo.
def var v-Product as char no-undo.
def var v-ExDir as char format "x(80)" no-undo.
def var v-LookBack as int no-undo init 90.
{tools/altpubs/audit/var.i}
{tools/altpubs/audit/procedures.i}
def stream sout.
def temp-table tt-demo
field entityid as int format ">>>>>>>>>9"
field answer like DemographicAnswer.Answer.
v-ConfigFile = search(v-ConfigFile).
if v-ConfigFile = ? then do:
message "config file config.csv was not found" view-as alert-box.
RETURN "ERROR".
end.
input from value(v-ConfigFile).
run ReadConfig.
input close.
for each tt-Config where tt-Config.Section = 'local' and
tt-Config.SectionValue <> ?:
v-loc = tt-Config.SectionValue.
case tt-Config.SettingName:
when 'ExchDir' then v-ExDir = tt-Config.SettingValue.
when 'Product' then v-Product = tt-Config.SettingValue.
when 'Routes' then v-RouteIDs = tt-Config.SettingValue.
when 'LookBack' then
do:
v-LookBack = integer(tt-Config.SettingValue) no-error.
if error-status:error then v-LookBack = 90.
end.
end.
end.
v-ExDir = v-Exdir + lc(v-loc) + "/".
file-info:file-name = v-ExDir.
if not( file-info:file-type begins "D") or file-info:file-type = ? then
do:
unix silent makedir value(v-ExDir) && chmod 777 value(v-ExDir).
file-info:file-name = v-ExDir.
end.
assign
v-File = v-ExDir + lc(v-Product) + "Audit" +
string(month(today),"99") + "-" +
string(day(today),"99") + "-" +
substring(string(year(today),"9999"),3) + ".txt".
for each DemographicAnswer where DemographicAnswer.DemographicId = v-RouteIDs
no-lock:
create tt-demo.
assign tt-demo.entityid = int(DemographicAnswer.EntityId)
tt-demo.answer = DemographicAnswer.Answer.
end.
output stream sout to value(v-file).
put stream sout unformatted
"HEADER B2 " string(today) skip.
for each tt-demo,
each Subscription no-lock
where Product = v-product
and SubscriptionID = tt-demo.entityid
and Subscriber = yes
and Getspaper = yes:
find last RouteSubscription of Subscription no-lock no-error.
if available routeSubscription then do:
for each Occupant of Subscription no-lock,
each Address of Subscription no-lock:
find OccupantPhone of Occupant no-lock no-error.
if available OccupantPhone then
v-phone = OccupantPhone.AreaCode + OccupantPhone.Phone.
else
v-phone = "".
find last OccupantEmail of Occupant no-lock no-error.
if available OccupantEmail then
v-email = OccupantEmail.EmailAddress.
else
v-email = "".
case DeliveryScheduleId:
when "MON-FRI" then v-copies = RouteSubscription.Copies[2].
when "FRI-SUN" then v-copies = RouteSubscription.Copies[1].
when "SUNONLY" then v-copies = RouteSubscription.Copies[1].
when "7DAY" then v-copies = RouteSubscription.Copies[1].
when "MON-SAT" then v-copies = RouteSubscription.Copies[2].
when "THUONLY" then v-copies = RouteSubscription.Copies[5].
when "WEDONLY" then v-copies = RouteSubscription.Copies[4].
when "SATSUN" then v-copies = RouteSubscription.Copies[1].
end case.
put stream sout unformatted
tt-demo.Answer "|"
Subscription.SubscriptionId "|"
Subscription.Product "|"
Occupant.LastName "|"
Occupant.FirstName "|"
trim( Address.HouseNumber) "|"
trim(Address.Postdirectional) "|"
trim(Address.StreetName) "|"
trim(Address.StreetSuffixId) "|"
trim(Address.postdirectional) "|"
trim(Address.UnitDesignatorID + trim(Address.UnitNumber)) "|"
Address.CityId "|"
Address.StateId "|"
Address.ZipCode "|"
v-phone "|"
Subscription.DeliveryScheduleId "|"
v-copies "|"
"2" "|"
v-email skip.
end.
end.
end.
put stream sout unformatted
"TRAILER ".
output stream sout close.
答案 0 :(得分:2)
这实际上只取决于一些事情,但如果没有看到你的代码就很难回答。
1)那里确实没有新线路。它只是看起来像它,因为你的texteditor打开文件时打破了行。如果是这种情况,最大化/更改编辑器的窗口大小将改变显示新行的位置。
2)该领域确实有一条新线。那将被导出。如果要使用EXPORT导出值,可以尝试执行以下操作来替换换行符:
EXPORT REPLACE(streetname, "~n","").
如果这有效,则数据库中有新行。
3)导出数据的方式有问题。由于您没有发布示例代码(这样做总是一个好主意),我们无法了解这一点。
我的赌注是1号或2号。如果您使用像EXPORT这样简单的导出方法,那么你真的不应该遇到麻烦......
答案 1 :(得分:0)
Jens说的很多(我已将此作为评论,但Stack Overflow不会让我......)。
尝试在Notepad ++中打开文件并禁用View-&gt; Wrap,或者使用您选择的编辑器执行类似的操作。 线路馈送很可能“并不存在”。
答案 2 :(得分:0)
前段时间我遇到了同样的问题。问题出在数据域的内容上,其中有用户用密钥输入的CHR(10)(换行)和CHR(13)(回车)字符。我找到了一个简单的解决方案来解决这个问题,通过创建一个函数将这些字符转换为''并将其与PUT语句一起使用。我将使用你的两个字段......
FUNCTION stringExport RETURNS CHAR
( INPUT p-input AS CHAR ):
RETURN TRIM(REPLACE(REPLACE(p-input,CHR(13),''),CHR(10),'')).
END FUNCTION. /* stringExport */
PUT STREAM sout UNFORMATTED
stringExport(Occupant.FirstName) "|"
stringExport(Address.HouseNumber) "|" SKIP.
这样做可能会解决您的问题。显然你可以用''by''代替。这取决于你的需求。
希望它有所帮助。
答案 3 :(得分:0)
看起来您遇到问题的字段是address.postdirectional
。正如其他人所说,首先要检查的是数据中没有隐藏的换行符。
在过程编辑器/ tramlines中,尝试一些简单的事情:
for each address no-lock:
display procedure.postdirectional.
end.
您应该在该点看到数据中的任何换行符。