2013-08-19 95 views
0
OUTPUT TO "logfile.txt". 

FOR EACH ...: 
    ... 
    PUT "Some log data". OUTPUT CLOSE. OUTPUT TO "logfile.txt" APPEND. 
    ... 
END. 

未找到合適的語句來保存文件。我不想用UNBUFFERED APPEND,因爲它應該比較慢。也許有內置的日誌記錄工具?也許STREAMS可以幫助我?問題在我的解決方案中,我必須指定日誌文件名,每次我用OUTPUT TO聲明打開它。嵌套過程可能沒有關於文件名的線索。如何在不關閉的情況下保存文件?

+0

你試圖解決的問題究竟是什麼? –

+0

你的代碼有點奇怪。對於每一次迭代,你都會覆蓋文件。另外,退出時您仍然會打開文件。 – Jensd

+0

@Tim Kuehn通常問題是如何在不關閉的情況下保存文件? – Progressive

回答

0

沒有「保存」選項。

但是......你可以強制輸出與被刷新:

put control null(0). 

「據說慢」是非常模糊的。是的,有無緩衝輸出的潛在更多IO。但是否真的很重要取決於你在做什麼以及如何使用它。這是非常不太可能,它實際上很重要。

STREAM肯定有助於保持組織結構,並使其不必知道嵌套過程中文件的名稱。

是的,有內置的測井工具。看看LOG-MANAGER系統句柄。

在問題中的代碼將被更好地寫成:

define stream logStream. 

output stream logStream to value("log.txt") append unbuffered. 

for each customer no-lock: 
    put stream logStream custName skip. 
    /* put stream logStream control null(0). */ /* if you want to try fooling with buffered output... */ 
end. 

output stream logStream close. 
+0

'LOG-MANAGER'和'WRITE-MESSAGE()'對用戶日誌很有用,但是我怎麼去掉不必要的信息或者改變輸出格式?[13/08/19 @ 22:15:22.244 + 0600] P -003216 T-000248 1 4GL - 記錄水平設置爲= 4'(在'--'之前我不需要任何信息) – Progressive

+0

它不可更改。標準格式是LOG-MANAGER的好處之一。 –

1

的問題,因爲它主張仍然是不明確的。

如果你想辦法的路線,通過一個標準的「服務」類似於LOG-管理器的輸出,你可以通過使用一個類的

  1. 靜態成員,
  2. 使用通過在會話超程序使用API​​,把它在一個持續的過程,併發布到它的API,
  3. 的API

流將給你一個方法來隔離單個proced輸出ure或class到單個文件,並保持輸出不與生產輸出混合,但它僅限於當前程序,這意味着它不是一個通用解決方案,因爲它是一個應用程序範圍的日誌記錄工具。

相關問題