这是一个奇怪的问题。我有一个pascal源代码,它使用GotoXY函数来生成输出,但现在我需要将输出从控制台重定向到一个文件。有任何想法吗?pascal crt输出重定向
0
A
回答
1
最后完成。
uses
Windows;
type
TAttachConsole = function (dwProcessId: DWORD): LongBOOL stdcall;
var
AttachConsole: TAttachConsole;
mProcessID, Hcwnd: Cardinal;
procedure Attach;
begin
@AttachConsole := GetProcAddress(GetModuleHandle('kernel32.dll'), 'AttachConsole');
GetWindowThreadProcessId(FindWindow(nil,'C:\WINDOWS\system32\cmd.exe'),@mProcessID);
AttachConsole(mProcessID);
end;
function get(x, y: byte) : string;
const
SMB = 1;
var
chRead: Cardinal;
BufInfo: _CONSOLE_SCREEN_BUFFER_INFO;
lpCh : PChar;
Coord: _COORD;
begin
Hcwnd:=GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo (Hcwnd, BufInfo);
GetMem(lpCh,SMB);
Coord.X:=x;
Coord.Y:=y;
lpch := '';
ReadConsoleOutputCharacter(Hcwnd,lpCh,SMB,Coord,chRead);
get:=string(lpCh^);
end;
var x, y : integer;
buf : array[0..24] of string;
begin
for y := 0 to 24 do
begin
for x := 0 to 79 do
buf[y] := buf[y] + get(x,y);
end;
for y := 0 to 24 do
writeln(buf[y]);
end.
0
我假设你在谈论Turbo Pascal函数,而不是C/C++提供的类似命名函数。 (虽然功能非常相似。)
不幸的是,你有几件事情对你的工作 - 的Writeln
屏幕和文件版本不同,GotoXY
是一个保留字,等。我怀疑你最好的选择是用一个内部指向基于全局标志的屏幕或文件的通用函数调用来替换I / O调用。或者你可以插入单个的IF
语句来选择在任何发生I/O的地方使用哪种逻辑。
相关问题
- 1. 重定向输出到输出文件
- 2. 重定向Trace.axd输出
- 3. 重定向标准输出
- 4. 基本输出重定向
- 5. 命令输出重定向
- 6. 重定向输出猛砸
- 7. QtScript输出重定向
- 8. 如何重定向输出?
- 9. 的ProcessBuilder重定向输出
- 10. 输出重定向在C
- 11. Bash - 输出重定向
- 12. 重定向测试输出
- 13. C++重定向输出
- 14. 重定向音频输出
- 15. 使输出重定向
- 16. 重定向崩溃输出
- 17. 重定向AWK输出输入到GDB
- 18. Java的输入输出重定向流
- 19. 重定向cmd.exe的输入/输出
- 20. 重定向输出和错误重定向命令后
- 21. 如何重定向多行重定向输入bash后的输出?
- 22. 输出重定向到多个文件
- 23. 重定向java和javac输出
- 24. bash输出重定向概率
- 25. 重定向输出的进程
- 26. CMD输出部分重定向C#
- 27. Bash:重定向init.d输出变量
- 28. 输出重定向到文件
- 29. execvp,ls的输出重定向
- 30. 如何重定向cmnd输出
是的,关于tp func。但是没有GotoXY,格式化将会丢失。可以试试这个http://msdn.microsoft.com/en-us/library/windows/desktop/ms684969(v=vs.85).aspx函数。 – yuyoyuppe 2011-12-26 14:53:07
呃,在写入文件时如何“格式化”?你有点受限于线性“演示”。 – 2011-12-26 18:50:20
我知道,但GotoXY在控制台屏幕上删除了这个限制。请参阅下面的解决方案 – yuyoyuppe 2011-12-27 18:33:39