【Delphi初心者】今から始めるDelphi Part01 if not error then begin try try while (not Eof(fp)) do begin Readln(fp, str); sum:=sum+StrToFloatDef(str, 0); end; except error:=true; end; finally CloseFile(fp); end; end; if error then begin Writeln(ErrorString); end else begin writeln(FloatToStr(sum)); end; end. //EOF
>>951 混乱させてるかな・・・
確かに例外処理が無かった頃はフラグでエラー処理とかしてたのだけれど
それをスマートに書くために例外処理機能ができたといってよい。
どうしてもフラグ使ったほうがわかりやすい場合や
達人が処理速度重視してフラグを使うのはいいと思うのだけれど
ここでは基本に忠実に処理して欲しい。
ヒント
try
except
on E: Exception do Writeln(E.Message);
end;
try と except のなかに全部の実行コードを書けばよいはず。
>>953 読み込み中に例外が発生するとファイルをクローズできないのでは
ないかと気にしていますがどうでしょうか
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, Classes;
const
filename='test.txt';
var
sum: double;
fp: TextFile;
str: string;
begin
sum:=0;
try
AssignFile(fp, filename);
Reset(fp);
while (not Eof(fp)) do
begin
Readln(fp, str);
sum:=sum+StrToFloatDef(str, 0);
end;
CloseFile(fp);
writeln(FloatToStr(sum));
except
on E: Exception do Writeln(E.Message);
end;
end.
オープンして try ファイルアクセス finally CloseFile(fp) end;
956 :
デフォルトの名無しさん :2005/11/10(木) 21:01:10
>>955 うまくいきました、ありがとうございます
Writelnの位置で悩んでたのですがクローズする前でもいいとやっと気づきました
例外は(戻り値をチェックするのと同じように)関数ごとにtryで囲むものだと思っていたので考えを改めます
uses
SysUtils, Classes;
const
filename='test.txt';
var
sum: double;
fp: TextFile;
str: string;
begin
sum:=0;
try
AssignFile(fp, filename);
Reset(fp);
try
while (not Eof(fp)) do
begin
Readln(fp, str);
sum:=sum+StrToFloatDef(str, 0);
end;
writeln(FloatToStr(sum));
finally
CloseFile(fp);
end;
except
on E: Exception do Writeln(E.Message);
end;
end.
>>956 ◎
次は、例外処理の締めとしてRaiseを使おう。
ファイルが開けないときは
writeln(filename)した後、今の例外処理(Writeln(E.Message);)
を実行するように、
また、読み込みエラーのときは、E.Messageの内容を
"読み込めねー"
に変更してみてみてくれ。どちらも Raise を使えば簡単にできる。
Editを使って、文字揃えって出来ないのでしょうか? いつも左に寄っていて、右揃えにしたいと思うのですが。
そんなコンポはたくさんあるよ、さがすと
右揃えは9x系のWindowsがサポートして無かったからね。 2000とかXPならCreateParamsをoverrideしてウィンドウスタイル設定してやればいけるはず。
>>959 なるほど、標準仕様じゃ駄目なんですね。
ポトペタするためには、部品を掻き集めてこないと。
お陰様で少しDelphiプログラミングの概要が掴めた気がします。
ぐぐってみてDelphian Worldを見つけ、登録コンポーネントを見てみましたが、
どれがいいのかよくわからないような状態です。Delphi P6 で使えるのは?
D6とあるものだけがきっと使えるのでしょうね。
>>960 > 2000とかXPならCreateParamsをoverrideしてウィンドウスタイル設定してやればいけるはず。
漏れには、まだこの意味がよくわかっていないのですが、頑張って理解したいと思います。
改行文字を取り除こうと思って、「改行文字置換 Delphi」等と思いつくままぐぐっていたら、
何回かで偶然ここ(
>>149 )が出てきました。うわぁーい!\(^_^)/
> AnsiReplaceStrやAnsiReplaceTextでどうでしょ?
文字列置換は、awkやPerlではよく使っていたので、確かsubstrだったっけ?
これがDelphiじゃ標準的な関数なんでしょうね。
> DELPHIで良く使用する制御文字
> DELPHIで良く使用する制御文字を
> 下記に列挙します。
>
> 改行コード CR #13
> 改行コード LF #10
> 改行コード CRLF #13#10
> タブ #9
>
> 改行コードは
> WindowsではCRLF
> MacではCR
> Unix系ではLF
> となっています。
その過程で、というのもついでに見つけました。
「S :=AnsiReplaceText(S, '投稿日:', 'DateTo(');」とあると、使い方は、以下みたいなのかな?
改行を半角スペースにする積りなんですが・・・。s := AnsiReplaceText(s,'#13#10',' ')
あと、高速のReplaceString 関数も:
ttp://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/article/069/069334.html
>>961 TEditは「何かのヴィジュアルコンポーネント」の一種で、
「何かのヴィジュアルコンポーネント」は「何かの(アイコン表示されるものも含む)コンポーネント」の一種…。
これはわかる?
派生といって、既存のグループに属する新種を作り出すことができるんだけど、
新しいコンポーネントもそうやって作成する。
この場合、「新しいコンポーネント」をTEditの一種として作ればいい。
overrideってのはあるメソッドを自作のもので上書きすること。
難しそうだけど、実際必要なコード量はメチャ少ない。
既存コンポーネントのほうも、D6と無くても、恐らく動作確認がなされてないだけで使えるかもしれない。
というか使えない方がおかしい。
インストール時に設計時パッケージまわりの仕様変更でつまずくかもしれないし
この程度の事でもバージョン依存してる変な既存コンポーネントもあるかもしれないけれど
それはそれで設計時の動作を理解するきかっけになるので、
自作でも利用でも、まずやってみて、
つまずいたらまたここに聞きに来ればいいんじゃないかな。
そんなに長く書くなら TMyEdit クラスのコードをしめす方がはやそうだな
しかも回答有り有りなFAQだし。
>>963 >派生といって、既存のグループに属する新種を作り出すことができるんだけど、
上のはイメージではわかりますが、確かこれは「型の継承」と言って、
オブジェクト指向言語の特性というのは読み込んだ資料に書いてありました。
派生は違うのかな?
>overrideってのはあるメソッドを自作のもので上書きすること。
ということは、そのメソッドも継承されるということですか?
>難しそうだけど、実際必要なコード量はメチャ少ない。
みたいですね。漏れの場合、辿りつくのに物凄く時間は掛かるけど、書けたら意外に短いです。
>既存コンポーネントのほうも、D6と無くても、恐らく動作確認がなされてないだけで使えるかもしれない。
>というか使えない方がおかしい。
普通は上位互換ですよね。でも、エラーを吐いたんだけどなあ。それ聞いてコンポ探しにやっと安心しました。
>それはそれで設計時の動作を理解するきかっけになるので、
ですね。まだまだ、強引なコーディングの癖が抜けないので、コンパイラから怒られてばかりです。_| ̄|○
後で書いても駄目なのね・・・。ちゃんとした書き方を身に付けないと。きっと新規フォームもそうなのかな?
他のを調べて、ちゃんと宣言部分も書いたんだけどなあ。
>自作でも利用でも、まずやってみて、
>つまずいたらまたここに聞きに来ればいいんじゃないかな。
そうします。またよろしくお願いしますね。m(_ _)m
>>964 TMyEdit クラスのコードと聞いてもチンプンカンプンなんですが、
コードを示していただければ、また勉強になると思うのでよろしくお願いいたします。
前にされていた方のような「道場破り」的な難度だと、漏れには全く駄目ですから。
今後ともよろしくお願いいたします。
>>957 program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, Classes;
const
filename='test.txt';
var
sum: double;
fp: TextFile;
str: string;
begin
sum:=0;
try
try
AssignFile(fp, filename);
Reset(fp);
try
while (not Eof(fp)) do
begin
Readln(fp, str);
sum:=sum+StrToFloatDef(str, 0);
end; writeln(FloatToStr(sum)); finally CloseFile(fp); end; except on E: EInOutError do begin case (E.ErrorCode) of 2: begin writeln(filename); raise end; else begin raise Exception.Create('読み込めねー');
970 :
デフォルトの名無しさん :2005/11/12(土) 22:31:38
end; end; end; end; except on E: Exception do Writeln(E.Message); end; end.
意味ねー
>>966 派生 derive
継承 inherit …「星を継ぐもの(star inheritors)」とか
対応する英語は違うけど、意味は、だいたいおんなじ。
それから、型を継承したらメソッドも全部くっついてきます。
>>967 type
TMyEdit = class(TEdit)
protected
procedure CreateParams(var Params: TCreateParams); override;
end;
procedure TMyEdit.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.Style := Params.Style + ES_RIGHT;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
with TMyEdit.Create(self) do
begin
Parent := self;
Left := 10;
Top := 10;
Text := '右よせ';
end;
end;
>>972 >それから、型を継承したらメソッドも全部くっついてきます。
ご丁寧に解説していただき、本当に有難うございました。
同じ意味なんですね。 「星を継ぐもの(star inheritors)」なのか・・・。
そうやってメソッドも付いてくるから便利なんですね。なるほどなあ。
>>973 まだよくはわからないのですが、その大体の雰囲気は掴めました。
機能を付け加えると書かれたイメージが。後でよく検討してみますね。
わざわざ有難うございました。
a b ----> a b c c のように改行で区切られた中身(前後に半角スペース等がつく場合あり)を 半角スペース区切りにしようと思って、以下のようなコードを書いたのですが、 よくわかりません。testという文字列変数に入っています。どうして駄目なのかな? Memo1.Lines.Add( AnsiReplaceText(Trim(test) ,'#13#10' ,' '));
'#13#10'ではなく #13#10 または sLineBreak
>>968 やはり例外処理は初心者にとって第一の壁みたいだな。
でも完全に理解すればほんとプログラムの質が上がるのでがんばれ。
ヒント:
try
try
except
end;
except
end;
>>976 > #13#10'ではなく #13#10
> sLineBreak
ああーっ?! そうだったのかー・・・。_| ̄|○
有難うございます。表記の仕方が駄目だったんですね。
囲まなくてもいいのか。全く考えてもいなかった可能性でした。
awkやPerlでは囲っていたような気がするので、その辺の癖でしょうね。
駄目駄目な漏れですが、今後ともまたよろしくお願いいたします。m(_ _)m
合流って言うかもともと重複。分ける意味ないだろ。
>>980 うわぁーい!やったー!!!\(^_^)/
全くの流用だけど、WindowsOSの種類を吐くプログラムが書けたぞ。
結果で考えれば、関数の定義、戻り値の定義が不整合。整数と文字列で・・・。
たったこれだけで、漏れは、昨晩夜遅くまで悩んでいたのか。_| ̄|○
きっとあっちじゃ、こんな気軽には書けそうもない気がするなあ。
Delphiプログラマ同士の馴れ合いや雑談はマ板で。 質問は質問スレで。 ここは重複。 質問スレがどうしても嫌だというなら次スレはマ板に立ててくれ。 最低限の板のルールは守ろう。
>>980 くだすれ(超初心者)は時々変な人が来るから、書きづらいって事?
くだすれ(中級者)の次すれでもOKだと思う。
質問って言うより勉強スレが欲しいって事でしょ。 重複にならないよう、マ板に立てればいいんじゃない?
そういう事か。ブログ作れ。
>>983 マ板って、きっとプログラマー板ってことですよね。
前に荒れることが多いって書いてあったような気がしますが。
でも、そう言うなら、やっぱりここはこれで終わりにしましょうか。
道場破りをしていた人は、あっちでもあれが出来るのかな?
>>984 漏れはまだまだ駆け出しだから、超初心者くだすれでいいです。
ここで漏れを教えていただいていた方があっちでも教えてくれれば。
ここみたいに隔離されていた方が気が楽だったんですが。あっちで頑張ってみます。
あっちを読んでみて漏れには難しいと思っていたところ、ここを見つけたのですが・・・。
あと今知ったのですが、置換関数には「StringReplace」というのもあるんですね。
ということで、あちらでもまたよろしくお願いいたします。ぺこり。m(_ _)m
マ板でプログラムのことを扱うのは板違い 適当な誘導すんなよ
>>988 板に行って見て来ましたが、「人」としての話題がメインのようですね。
勤務条件とかで、プログラム自体の話題はどうも違う気がしました。
次スレに挨拶してきた
>>990 漏れも真似して、挨拶してきました。有難う助かりました。
サイズ固定だからFixedSysなんだけど。 オレハいつもTerminalの10ポイントあたり。 これが 0とO、 1とl、 ;と:、 .と, あたりの区別が一番しやすい。 あと横幅が比較的狭いので画面が広く使える。
>>993 > サイズ固定だからFixedSysなんだけど。
あーっ・・・。フォントの名前だとばかり。
文字通り固定フォントだったのか。_| ̄|○
> オレハいつもTerminalの10ポイントあたり。
> これが 0とO、 1とl、 ;と:、 .と, あたりの区別が一番しやすい。
有難うございます。早速、これに変えてみますね。
参考にしたサイトも、このTerminalでした。定番みたいですね。
良かったなあ、やっと謎が解けて。漏れが呆けているだけじゃん・・・。
こんな乗りになるから、あっちでも大丈夫なのかなあ・・・。心配だ。orz
おそらく"FixedSys"の"Fixed"は固定幅という意味です. "System"というプロポーショナル(文字によって幅の異なる)フォントがあるのですが これもサイズが1種類しかないのです. フォントのデザインも"FixedSys"は"System"の固定幅版です.
>>995 > フォントのデザインも"FixedSys"は"System"の固定幅版です.
なるほど、そういう意味だったのですね。FixedSystemの省略形で。
そうやって意味がわかると、よく理解できますね。有難うございました。
998 :
デフォルトの名無しさん :2005/11/13(日) 23:18:08
Delphi6です IEコンポーネントを表示することはできたのですが、 そこにHTMLを追加するにはどうすればいいんでしょう?
WebBrowser1.Navigate('URL');
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。