Formで表示した内容をCSV形式で保存するには

解決


oishiman  2007-11-04 18:34:06  No: 28208

こんにちは。

初歩的な質問で申し訳ありません。
formにはlabelやstringgridなどに計算結果を表示するようにしておりますが、その結果を編集・加工できるようにCSV形式で保存したいと考えております。
どなたか、お力をお貸しください。


TS  2007-11-04 20:08:01  No: 28209

過去ログも参考にして下さい。

procedure TForm1.BitBtn1Click(Sender: TObject);
var i,j:integer;
    f:textfile ;
    st:string;
begin
  AssignFile(f,'c:\test.csv');
  rewrite(f);
  for i:=0 to StringGrid1.Colcount-1 do
    begin
      st:=StringGrid1.Rows[i].CommaText;
      writeln(f,st);
    end;
  CloseFile(F);
end;


oishiman  2007-11-04 21:36:23  No: 28210

ドラッグして使用しましたら、グリッド内部のCSVに成功しました^^

あと、2つ教えてください。

  ①保存先をデスクトップにするにはどうすればいいでしょうか
  ②グリッド上部に設けた説明用のラベルデータも併せてCSVにするには
    どうしたらいいでしょうか

すみませんが、ご教授ください。


からくち  2007-11-04 21:48:40  No: 28211

>ドラッグして使用しましたら、グリッド内部のCSVに成功しました^^
コード丸写しで、その内容を理解しようとしないの?
そんなことじゃ進歩しないよ。
教えてもらったコードを理解すれば①②の質問など自力解決できると思うけど。


oishiman  2007-11-04 22:10:48  No: 28212

すみません。
①は、デスクトップの指定先が分からなくて。
②で、label1〜6までcsv上部に追記できましたが、4〜6を1〜3の横に表示したいのですがわかりません。

procedure TForm2.BitBtn1Click(Sender: TObject);
var i,j:integer;
    f:textfile ;
    st:string;
begin
  AssignFile(f,'c:\test.csv');
  rewrite(f);

  writeln(f,groupbox1.caption);
  writeln(f,label1.caption);
  writeln(f,label2.caption);
  writeln(f,label3.caption);
  writeln(f,label4.caption);
  writeln(f,label5.caption);
  writeln(f,label6.caption);
  for i:=0 to StringGrid1.Colcount-1 do
    begin
      st:=StringGrid1.Rows[i].CommaText;
      writeln(f,st);
    end;
  CloseFile(F);
end;


TS  2007-11-04 23:06:23  No: 28213

>デスクトップの指定先が分からなくて。
私のXPでは  C:¥Documents and Settings¥All Users¥デスクトップ
All Usersのところはネットで検索してみるか、フォルダーを覗いてみて
下さい。
CSVのファイルは単に文字と文字の間に','が入っているだけです。
writeln(f,label1.caption + ',' + label4.caption);


oishiman  2007-11-04 23:27:55  No: 28214

保存先は、XPでも95でもデスクトップになるようにできないか
考え中でした。
もう少し考えて見ます。

ご意見ありがとうございます。<(_ _)>


TS  2007-11-05 00:05:22  No: 28215

レジストリ
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders]
Desktopを読むとするんですかね。


TS  2007-11-05 02:12:30  No: 28216

からくち  さんに叱られそうですが。

procedure TForm1.BitBtn2Click(Sender: TObject);
var reg:Tregistry;
    st:string;
begin
  reg:=TRegistry.Create;
  try
    reg.rootkey:=HKEY_CURRENT_USER;
    if reg.openkey(
      '\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders'
      ,false) then
     begin
       st:=reg.ReadString('Desktop');
       reg.CloseKey;
       bitbtn2.Caption:=st;
     end;
  finally
    reg.free;
  end;
end;


Mr.XRAY  URL  2007-11-05 03:03:25  No: 28217

>保存先は、XPでも95でもデスクトップになるようにできないか

デスクトップと言っても,ログインユーザ,全てのユーザの,とあります.

ということで,既にレスがありますが,こんな方法も考えられますデス.
CSIDL値で取得する方法です.デスクトップは,
CSIDL_DESKTOP,CSIDL_DESKTOPDIRECTORY,CSIDL_COMMON_DESKTOPDIRECTORY
などです.以下が参考記事です.
なお,この件に関しての質問は一切受付けません.自力でお願いします(苦笑).

http://homepage2.nifty.com/Mr_XRAY/Delphi/plSamples/T_SpecialFolderPath_Old.htm


Mr.XRAY  URL  2007-11-05 03:53:50  No: 28218

(2) の
>4〜6を1〜3の横に表示したいのですがわかりません。
○囲みの数字は使用禁止文字ですので(2)に変更させていただきました.

はよく意味がわかりませんが,CSVに保存? 表示?
おそらく,CSVに保存のことだと思います.

ところで,oishiman さんは,どなたからかCSVに保存という指示があり,それを実行する
プログラムを組んでいるのでしょうか.もしそうだとしたら,まず,CSVとは何かを
調べてみてください.おのずから解決策は見つかると思いますよ.


Mr.XRAY  URL  2007-11-05 03:57:50  No: 28219

>4〜6を1〜3の横に表示したいのですがわかりません。

この「横」の意味もわかりませんが,CSVの意味がわかれば,質問の内容も
変化すると思いますが...


oishiman  2007-11-05 04:53:25  No: 28220

皆様方、大変ご迷惑をおかけしております。

CSVについてもうちょっと調べてみます。
やろうとしておりましたことは、CSV形式で保存されたものをエクセルで起動
した際に右横のセルに表示させたいと考えておりました。

また、変な質問で申し訳ありません。

再度、皆様のご意見を参考に検討してみます。


Mr.XRAY  URL  2007-11-05 06:29:55  No: 28221

>右横のセルに表示させたいと考えておりました。

右横? これまた意味が不明ですが...  右横というのは何の右横?

oishimanさん,CSVというのは,というかCSVファイルというのは
例えば Goolgleで「CSVとは」では検索すると,

http://e-words.jp/w/CSV.html
http://homepage3.nifty.com/dkcsv/soft/csv/index.html

なんです.つまり,CSVファイルというのはテキストファイルのことなんです.
テキストというのは文字のことです.
ですから,テキストファイルというのは文字列を保存したファイルのことです.

この時,このテキストファイルの中に「,」(カンマ)があると,それをデータの
一区切りとして,例えばエクセルの一つのセルに表示されます.

http://homepage3.nifty.com/dkcsv/soft/csv/index.html
のように,文字列「あ,い,う,え,お」  が保存されていれば,同じURLの図のよう
に,エクセルで開くと「,」(カンマ)区切りで,各々のデータとして認識してくれる訳です.

つまり,エクセルの各セルに表示させたいデータ(文字列に限ります)をカンマで区切った
文字列をファイルに保存すればいいわけです.
じゃあ,カンマが入った文字列を一つのセルに表示されるには,というのはまた別の問題
です(必要なら別に質問しするといいでしょう).

以上のことを理解すれば,
>4〜6を1〜3の横に表示したいのですがわかりません。
の問題は解けるのではないかと思いますが,どうでしょう.

参考までに,'AAA'と'BBB'という文字列を結合して'AAABBB'という文字列を作成するには,
    'AAA'+'BBB'
とすればOKです.もちろん変数でも構いません.
くどいようですが,カンマごとにひとつの(エクセルのセルの)データです.
改行を入れると,エクセルで表示される時は下の行の各セルに表示されます.

カンマ区切りの文字列を保存する時には,そのことに注意して保存します.
これは,文字列(テキスト)の保存の問題です.
エクセルで1行に表示したいデータをカンマ区切りで,一つのまとまりある文字列で
保存することになります.
先程の'AAA' と'BBB'を同じ行で別のセルに表示したい場合は,もうおわかりだと
思いますが,'AAA,BBB'という文字列を作成して保存することになります.
(途中にカンマを入れます)


oishiman(ど素人)  2007-11-05 06:54:50  No: 28222

丁寧なご返答ありがとうございます。

私のようなど素人の挑戦に付き合っていただき、ありがとうございます。

CSV理解できました。

デスクトップへの保存は、C:など何も指定しなければできました。

その分も自分なりに調べてみます。

TSさま、からくちさま、Mr.XRAY さま  ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加