線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1803
推到 Plurk!
推到 Facebook!

關於把檔案載入stringgrid

尚未結案
nata_li
一般會員


發表:4
回覆:5
積分:1
註冊:2006-11-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-01-22 22:54:11 IP:220.246.xxx.xxx 訂閱
你好!

小妹是個新手, 遇上些麻煩, 煩請大家幫幫忙!
首先, 我有一個 stringgrid 和 mainmenu
我的目標是: 當使用者click on mainmenu 中的 'easy',
程式會自動load 一個textfile 入stringgrid.
(textfile 的directory是randomly generated, 我把textfile 這樣放置的:
\Project\ ----all delphi things
----puzzle\easy\
---001.txt
.
---\002.txt
.
---\003.txt
.
---\004.txt
.
---\005.txt
.
---\006.txt
.
---\007.txt
.
---\008.txt
.
---\009.txt
.
---\010.txt

我嘗試用randomrange(1,10) 來 randomly 挑一個從一至十的數字, 然後弄成一個file directory.
但當我check 的時候, 我發現generate 出來的, 總是C:\...\001.txt, 而不能產生其他數字, 我應該怎麼修改呢?

另外一個更嚴峻的問題是
我不能成功把textfile 載入stringgrid,
測試的時候, stringgrid 裏面每個cell 產生的都是同一個奇怪的符號, 並非textfile 裏面的字, 到底我犯了什麼錯誤?
在這之前, 我曾試過成功把textfile 載入stringgrid(****2) , 今次我以同樣手法寫, 所以我總找不出錯處。

我明白請大家幫這個忙可能是非常費時和乏味,
然而 我真的非常需要你們的幫助,
所以 懇請大家高抬貴手 感激不盡!

****1
unit Sudoku;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, Math, Menus, StdCtrls;

type
allarry=array[1..9, 1..9]of char;
TForm1 = class(TForm)
StringGrid1: TStringGrid;
MainMenu1: TMainMenu;
NewGame1: TMenuItem;
Easy: TMenuItem;
Standard: TMenuItem;
Hard: TMenuItem;
Expert: TMenuItem;
Extreme: TMenuItem;
btnhint: TButton;
btnchecksol: TButton;
Button1: TButton;
btnReset: TButton;
btnInp1: TButton;
btnInp2: TButton;
btnInp3: TButton;
btnInp4: TButton;
btnInp5: TButton;
btnInp6: TButton;
btnInp7: TButton;
btnInp8: TButton;
btnInp9: TButton;
Button9: TButton;
lbl: TLabel;
procedure EasyClick(Sender: TObject);
procedure StandardClick(Sender: TObject);
procedure HardClick(Sender: TObject);
procedure ExpertClick(Sender: TObject);
procedure ExtremeClick(Sender: TObject);


private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
Randomname: String;
puzzle : allarry ;
actual : allarry ;
puzzlefile, actualfile, userfile: textfile;
curdir: string ;

implementation

{$R *.dfm}
procedure genrandomname(var randomname: string);
var
i, r, n: integer;
k: string;
begin
r:=randomrange(1,10);
k:= IntToStr(r);
n:= 3 - length(IntToStr(r)) ;
for i:= 1 to n do
k:= '0' k;
randomname:= Randomname k '.txt';

end;


Procedure load_into_puzzle_array(var puzzle:allarry);
var
i, j : integer;
dir, s: string;
begin
dir:=GetCurrentDir;
s:=Concat(dir, '\puzzle\', randomname);
form1.Caption:= s;
assignfile(puzzlefile, s);

{$I }
Exit;
{$I-}
Reset(puzzlefile);
for i:= 1 to 9 do
for j:= 1 to 9 do
begin
Read(puzzlefile, puzzle[i, j]);
readln(puzzlefile) ;
end;
end;


Procedure load_into_actual_array(var actual:allarry);
var
i, j : integer;
begin
assignfile(puzzlefile, curdir Randomname);
{$I }
Exit;
{$I-}

Reset(puzzlefile);
for i:= 1 to 9 do
begin
for j:= 1 to 9 do
Read(puzzlefile, puzzle[i, j]);
readln(puzzlefile) ;
end;
end;


Procedure load_puzzle_into_stringgrid(stringgrid1:Tstringgrid);
var
i, j : integer;
begin
for i:= 0 to 8 do
for j:= 0 to 8 do
if puzzle[(i 1), (j 1)] <> '0' then
StringGrid1.cells[i,j]:=puzzle[(i 1), (j 1)]
end;


procedure TForm1.EasyClick(Sender: TObject);
begin
Randomname:= 'Easy\';
genrandomname(randomname);
load_into_puzzle_array(puzzle);
load_into_actual_array(actual);
load_puzzle_into_stringgrid(stringgrid1);
end;

procedure TForm1.StandardClick(Sender: TObject);
begin
Randomname:= 'Standard\' ;
genrandomname(randomname);
end;

procedure TForm1.HardClick(Sender: TObject);
begin
Randomname:= 'Hard\' ;
genrandomname(randomname);
end;

procedure TForm1.ExpertClick(Sender: TObject);
begin
Randomname:= 'Expert\';
genrandomname(randomname);
end;

procedure TForm1.ExtremeClick(Sender: TObject);
begin
Randomname:= 'Extreme\';
genrandomname(randomname);
end;



end.

****2

unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids;

type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
tryarray : array [1..9, 1..9] of char ;
tryread : textfile;
i, j : integer;
curdir: string ;

implementation
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
assignfile(tryread, 'C:\Documents and Settings\natalie\?agrave;面\intostringgrid\Puzzle\easy\001.txt');
{$I }
if (IOResult <> 0) then
showmessage('file not found.') ;

{$I-}
Reset(tryread);
if (IOResult=0) then
begin
for i:= 1 to 9 do
begin
for j:= 1 to 9 do
Read(tryread, tryarray[i, j]);
readln(tryread) ;
end;
for i:= 0 to 8 do
for j:= 0 to 8 do
if tryarray[(j 1),(i 1)] <> '0' then
form1.StringGrid1.cells[i,j]:= tryarray[(j 1),(i 1)]

end;

end;
end.
nicktop
一般會員


發表:2
回覆:9
積分:7
註冊:2007-01-20

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-01-22 23:18:43 IP:61.229.xxx.xxx 訂閱
回答妳第一個問題
妳可以這樣做
先呼叫 Randomize 初始化delphi的亂數產生器,像這樣
Randomize;
r:=randomrange(1,10);
就不會每次都是1了
nicktop
一般會員


發表:2
回覆:9
積分:7
註冊:2007-01-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-01-23 00:04:16 IP:61.229.xxx.xxx 訂閱
回答第二個問題
妳在 load_into_puzzle_array , load_into_actual_array 這兩個 procedure 裡面
都有一段這樣的程式碼
{$I }
Exit;
{$I-}
程式執行到 Exit 這行就跳出
procedure了,下面的程式碼根本不會被執行到,妳可以trace看看
{$I } {$I-}的用法我也不是很清楚,但是應該不是這樣用的

如果妳希望 assignfile(puzzlefile, s) 若出錯,則 exit procedure
那麼可以用delphi的例外處理機制
像這樣

try
assignfile(puzzlefile, s);
except
exit;
end;

nata_li
一般會員


發表:4
回覆:5
積分:1
註冊:2006-11-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-01-23 21:51:35 IP:218.103.xxx.xxx 訂閱

===================引 用 文 章===================
回答妳第一個問題
妳可以這樣做
先呼叫 Randomize 初始化delphi的亂數產生器,像這樣
Randomize;
r:=randomrange(1,10);
就不會每次都是1了

呀..是啊。
我實在太冒失啦 ^_^
nata_li
一般會員


發表:4
回覆:5
積分:1
註冊:2006-11-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-01-26 00:32:42 IP:219.77.xxx.xxx 訂閱

===================引 用 文 章===================
回答第二個問題
妳在 load_into_puzzle_array , load_into_actual_array 這兩個 procedure 裡面
都有一段這樣的程式碼
{$I }
Exit;
{$I-}
程式執行到 Exit 這行就跳出
procedure了,下面的程式碼根本不會被執行到,妳可以trace看看
{$I } {$I-}的用法我也不是很清楚,但是應該不是這樣用的

如果妳希望 assignfile(puzzlefile, s) 若出錯,則 exit procedure
那麼可以用delphi的例外處理機制
像這樣

try
assignfile(puzzlefile, s);
except
exit;
end;



多謝你呀! 我終於明白自己錯什麼。
更感謝你教我如何用delphi的例外處理機制
系統時間:2024-05-05 4:21:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!