917) テキストファイルに一度に改行を含む文字列を出力したい shira 2004/10/12(火) 21:19 |
|
|
|
●DOS/Windowsのバージョン Windows2000 DOS初心者です。 テキストファイルに「abc(改行)def」という文字列を 一度で出力したのですが、どうすればよいでしょうか? 過去ログなどで調べて、 abc >c:\test.txt def >>c:\test.txt と2回に分ければ実現できることはわかったのですが、 abc(改行)def >c:\test.txt という風に、1回で書きたいです。 |
|
922) Re:テキストファイルに一度に改行を含む文字列を出力したい oo 2004/10/13(水) 00:26 |
|
|
|
>●DOS/Windowsのバージョン Windows2000 > >DOS初心者です。 >テキストファイルに「abc(改行)def」という文字列を >一度で出力したのですが、どうすればよいでしょうか? > >過去ログなどで調べて、 >abc >c:\test.txt >def >>c:\test.txt >と2回に分ければ実現できることはわかったのですが、 >abc(改行)def >c:\test.txt >という風に、1回で書きたいです。 2回でなく1回にしたい理由は何なのでしょうか?2回に分けたほうがわかりやすいと思いますが。 一応、 echo abc^ def > c:\test.txt で出来ますが。(2行目は空行) |
|
923) Re2:テキストファイルに一度に改行を含む文字列を出力したい shira 2004/10/13(水) 09:27 |
|
|
|
>2回でなく1回にしたい理由は何なのでしょうか?2回に分けたほうがわかりやすいと思いますが。 >一応、 >echo abc^ > >def > c:\test.txt >で出来ますが。(2行目は空行) > すみません。説明が下手でした。 出力結果を以下の様に2行に分けたいのです。 test.txtの中身------ abc def ------------------- それを1回の実行で書き込みたいのです。。 echo abc >c:\test.txt echo def >>c:\test.txt ではなくて、 echo abc(改行)def >c:\test.txt ↑ココを記述する方法はないでしょうか?? という感じで。。 何か良い方法はないでしょうか?? |
|
924) Re3:テキストファイルに一度に改行を含む文字列を出力したい oo 2004/10/13(水) 16:00 |
|
|
|
>>一応、 >>echo abc^ >> >>def > c:\test.txt >>で出来ますが。(2行目は空行) >> > >すみません。説明が下手でした。 >出力結果を以下の様に2行に分けたいのです。 > >test.txtの中身------ >abc >def >------------------- > >それを1回の実行で書き込みたいのです。。 >echo abc >c:\test.txt >echo def >>c:\test.txt >ではなくて、 >echo abc(改行)def >c:\test.txt > ↑ココを記述する方法はないでしょうか?? >という感じで。。 >何か良い方法はないでしょうか?? 意味は通じてます。私の書いた方法で、見かけは2行に分かれて書かれます。 ただし、改行コードがCRLFじゃなくてLFだけになるので、TYPEやMORE等で表示したり、for /f で読み込んだりする分には問題無いですが、 そのあとの処理の仕方によっては改行文字がLFだけであることの不都合が出ます。例えばメモ帳での編集とか。 そういった用途なのでしょうか? echo aaa^ bbb>c:\test.tmp と、一旦別ファイルに書いた後で、 more c:\test.tmp > c:\test.txt すれば改行文字がCRLFに統一されますが、こんなことをするなら最初からechoを2回で書いたほうが良いですよね。 結局、 >2回でなく1回にしたい理由は何なのでしょうか?2回に分けたほうがわかりやすいと思いますが。 というところに行きつくと思います。その理由を書けば別の解決方法もあるかもしれません。特に理由は無くて仕様を知りたいと言うだけなら「無い」というのが答えでしょう。 |
|
926) Re4:テキストファイルに一度に改行を含む文字列を出力したい shira 2004/10/13(水) 17:52 |
|
|
|
>ただし、改行コードがCRLFじゃなくてLFだけになるので、TYPEやMORE等で表示したり、for /f で読み込んだりする分には問題無いですが、 >そのあとの処理の仕方によっては改行文字がLFだけであることの不都合が出ます。例えばメモ帳での編集とか。 TSQLから文字列(改行入り)をテキストファイルを出力して、 そのテキストファイルを添付してメール送信するという処理です。 添付ファイルなので、開いたときに改行が効いていないと困ります。 >2回でなく1回にしたい理由は何なのでしょうか? 変数に入れておいた改行入りの文字列を値を、TSQLから一度に出力したかったからです。 変数=1行目の文字列 テキスト出力 変数=2行目の文字列 テキスト出力 とできれば繰り返したくなかったのです。 >echo aaa^ > >bbb>c:\test.tmp >と、一旦別ファイルに書いた後で、 >more c:\test.tmp > c:\test.txt >すれば改行文字がCRLFに統一されますが、 プロンプトで同じように打ってみましたが、test.txtを開いてみても改行されていません(ToT) 改行文字がCRLFに統一される=改行されたように見えるのかと思ってしまいました。 TYPE、MORE、for /f などの意味が全くわかってないからですね、きっと。 やはり結論的には、1行1行出力、ですね?? |
|
927) Re5:テキストファイルに一度に改行を含む文字列を出力したい oo 2004/10/13(水) 19:39 |
|
|
|
>>2回でなく1回にしたい理由は何なのでしょうか? > >変数に入れておいた改行入りの文字列を値を、TSQLから一度に出力したかったからです。 > 変数=1行目の文字列 > テキスト出力 > 変数=2行目の文字列 > テキスト出力 >とできれば繰り返したくなかったのです。 TSQLを知らないのですが、TSQLからバッチの環境変数へのセットはどうやっているのでしょうか?(具体的なコード例は?) 改行コード入りのデータをそのままセットするのは可能でしょうか? >>echo aaa^ >> >>bbb>c:\test.tmp >>と、一旦別ファイルに書いた後で、 >>more c:\test.tmp > c:\test.txt >>すれば改行文字がCRLFに統一されますが、 上記のような要件だと、この方法では役に立ちませんね。 >プロンプトで同じように打ってみましたが、test.txtを開いてみても改行されていません(ToT) コマンドプロンプトからやるなら、echo aaa^ と打つと、More? と出るので、そこでEnterのみを打ちます。再度 More? と出るので、そこで bbb>C:\test.tmp と打ちます。 で、type C:\test.tmp とすると、aaaとbbbが2行に分かれて表示されると思います。ただし、メモ帳で開くと、aaa■bbb のように黒四角(LFコード)を挟んだ1行で表示されます。 そこでさらに more C:\test.tmp > C:\test.txt とやって、test.txtのほうをメモ帳で開くと今度は2行になってませんか? >改行文字がCRLFに統一される=改行されたように見えるのかと思ってしまいました。 そうです。 >TYPE、MORE、for /f などの意味が全くわかってないからですね、きっと。 多分、タイプミスか読み違いでしょう。 >やはり結論的には、1行1行出力、ですね?? 上記TSQLについての質問の回答如何によっては可能かもしれません。 あるいは、そもそもTSQLで直接ファイルに書けないのでしょうか? |
|
932) Re6:テキストファイルに一度に改行を含む文字列を出力したい shira 2004/10/14(木) 12:57 |
|
|
|
遅くなり、すみません。 >TSQLを知らないのですが、TSQLからバッチの環境変数へのセットはどうやっているのでしょうか?(具体的なコード例は?) >改行コード入りのデータをそのままセットするのは可能でしょうか? ---TSQLのコード例です------------------------------ Declare @Data Varchar(100) Declare @Cmd Varchar(200) Set @Data = 'aaa' + Char(13) + Char(10) + 'bbb' Set @Cmd = 'echo ' + @Data + ' >c:\test.txt' Exec master..xp_cmdshell @Cmd , NO_OUTPUT --------------------------------------------------- ①@Dataに改行入り文字列を代入 ②@Cmdに@Dataの内容をファイルに書くDosコマンドを結合する ③xp_cmdshellという、Dosコマンドを実行するTSQLの関数を呼出す 実行結果は、ファイル自体が作成されませんでした。 @Dataに'aaabbb'を代入すると、ファイル作成されます。 改行入りのデータは出力できないようです。 >>>echo aaa^ >>> >>>bbb>c:\test.tmp >>>と、一旦別ファイルに書いた後で、 >>>more c:\test.tmp > c:\test.txt >>>すれば改行文字がCRLFに統一されますが、 > >上記のような要件だと、この方法では役に立ちませんね。 > >>プロンプトで同じように打ってみましたが、test.txtを開いてみても改行されていません(ToT) > >コマンドプロンプトからやるなら、echo aaa^ と打つと、More? と出るので、そこでEnterのみを打ちます。再度 More? と出るので、そこで bbb>C:\test.tmp と打ちます。 >で、type C:\test.tmp とすると、aaaとbbbが2行に分かれて表示されると思います。ただし、メモ帳で開くと、aaa■bbb のように黒四角(LFコード)を挟んだ1行で表示されます。 >そこでさらに more C:\test.tmp > C:\test.txt とやって、test.txtのほうをメモ帳で開くと今度は2行になってませんか? > >>改行文字がCRLFに統一される=改行されたように見えるのかと思ってしまいました。 > >そうです。 > >>TYPE、MORE、for /f などの意味が全くわかってないからですね、きっと。 > >多分、タイプミスか読み違いでしょう。 そうでした。改行されました。 echo aaa^ (Enter) (Enter) ←ココが抜けていました。 bbb>c:\test.tmp more c:\test.tmp > c:\test.txt >あるいは、そもそもTSQLで直接ファイルに書けないのでしょうか? xp_cmdshell関数を介さないと、多分無理だと思います。 |
|
934) Re7:テキストファイルに一度に改行を含む文字列を出力したい oo 2004/10/14(木) 15:55 |
|
|
|
>>TSQLを知らないのですが、TSQLからバッチの環境変数へのセットはどうやっているのでしょうか?(具体的なコード例は?) >>改行コード入りのデータをそのままセットするのは可能でしょうか? > >---TSQLのコード例です------------------------------ >Declare @Data Varchar(100) >Declare @Cmd Varchar(200) > >Set @Data = 'aaa' + Char(13) + Char(10) + 'bbb' >Set @Cmd = 'echo ' + @Data + ' >c:\test.txt' >Exec master..xp_cmdshell @Cmd , NO_OUTPUT >--------------------------------------------------- > >①@Dataに改行入り文字列を代入 >②@Cmdに@Dataの内容をファイルに書くDosコマンドを結合する >③xp_cmdshellという、Dosコマンドを実行するTSQLの関数を呼出す > >実行結果は、ファイル自体が作成されませんでした。 >@Dataに'aaabbb'を代入すると、ファイル作成されます。 >改行入りのデータは出力できないようです。 なるほど。TSQLからCMD.EXEを呼んでいるんですね。バッチの環境変数を使っているわけじゃなくて。 Set @Cmd = '(echo aaa&echo bbb) >c:\test.txt' みたいなことは出来ると思うので、データ中の改行を '&echo.' に置換して、先頭に '(echo ' を、末尾に ')>c:\test.txt' を付加すれば出来そうに思えます。ただ、全体の文字列長の制限はあるかも。 >>あるいは、そもそもTSQLで直接ファイルに書けないのでしょうか? >xp_cmdshell関数を介さないと、多分無理だと思います。 Vectorで、TSQLで検索するとこんなのがありました。 >XP_TXTFILE SQL Server用拡張ストアドプロシージャ 1.20 >SQL ServerのTransactSQLから、直接テキストファイルの入出力を行う |
|
this article refers Vector Soft Library..
|
|
935) Re8:テキストファイルに一度に改行を含む文字列を出力したい shira 2004/10/14(木) 17:03 |
|
|
|
>なるほど。TSQLからCMD.EXEを呼んでいるんですね。バッチの環境変数を使っているわけじゃなくて。 > >Set @Cmd = '(echo aaa&echo bbb) >c:\test.txt' >みたいなことは出来ると思うので、データ中の改行を '&echo.' に置換して、先頭に '(echo ' を、末尾に ')>c:\test.txt' を付加すれば出来そうに思えます。ただ、全体の文字列長の制限はあるかも。 '(echo aaa&echo bbb) >c:\test.txt' の形で成功しました! aaa bbb になりました!!すごい感激です!!! でも成功する前に何回か失敗したので、理由をよろしければ教えて欲しいのです。。 ①&echoの次に半角スペースを忘れ、 '(echo aaa&echobbb) >c:\test.txt' とした時、「aaa」しか出力されない これは何となくわかりますが、&echoとbbbが別の文字と判定できなかったのですよね。 そもそも、&echoとはどういう意味でしょう??echoとは違いますか? ②( )を書くのを忘れた! 'echo aaa&echo bbb >c:\test.txt' とした時、「bbb」しか出力されない これは全く???です。 >Vectorで、TSQLで検索するとこんなのがありました。 >>XP_TXTFILE SQL Server用拡張ストアドプロシージャ 1.20 >>SQL ServerのTransactSQLから、直接テキストファイルの入出力を行う できるのかも知れないですね(笑)私も読んでみます。 こんなに懇切丁寧に教えて下さりまして、本当にありがとうございます。 |
|
936) Re9:テキストファイルに一度に改行を含む文字列を出力したい oo 2004/10/14(木) 19:00 |
|
|
|
>'(echo aaa&echo bbb) >c:\test.txt' の形で成功しました! >aaa >bbb になりました!!すごい感激です!!! 良かったですね。でも最初から「TSQLで今こうやっている」と書いていればもう少し早く解決したでしょう。 >でも成功する前に何回か失敗したので、理由をよろしければ教えて欲しいのです。。 > >①&echoの次に半角スペースを忘れ、 > '(echo aaa&echobbb) >c:\test.txt' とした時、「aaa」しか出力されない > > これは何となくわかりますが、&echoとbbbが別の文字と判定できなかったのですよね。 > そもそも、&echoとはどういう意味でしょう??echoとは違いますか? C言語分かりますか? (echo aaa&echo bbb) は、{ echo aaa; echo bbb; } のような意味です。いわゆるマルチステートメント。さらに括弧で囲んで全体を1コマンド扱いにする。 >②( )を書くのを忘れた! > 'echo aaa&echo bbb >c:\test.txt' とした時、「bbb」しか出力されない > > これは全く???です。 上記でお分かりかと思いますが、括弧を書かないと、 1コマンド目:echo aaa 2コマンド目:echo bbb >c:\test.txt と同じ意味になるので、echo aaa の結果はファイルには書かれません。 なお、echo bbb >c:\test.txt は、b3文字と空白1文字が書かれます。b3文字だけ書くためには、echo bbb>c:\test.txt のように文字列と>の間の空白は除きます。同じ意味で、& や ) の前にも空白を置かないように。最後のtest.txtと'の間も同じ。 |
|
939) ありがとうございました! shira 2004/10/15(金) 09:25 |
|
|
|
>良かったですね。でも最初から「TSQLで今こうやっている」と書いていればもう少し早く解決したでしょう。 本当にそうですね。これからはそうしますっ! 最後の解説のおかげで、解決しただけでなく疑問点もスッキリ解消しました。 ありがとうございました m(__)m |
|
929) Re5:テキストファイルに一度に改行を含む文字列を出力したい Hellcat 2004/10/13(水) 20:07 |
|
|
|
>やはり結論的には、1行1行出力、ですね?? なんとしても1行で処理したいのなら、フリーソフト(BATUTY)を使って以下のような方法で実現可能です。 bu !echo abc$Mdef "$M"がCR,LFに変換されて出力されます。 BATUTY 1.11 bu111.lzh http://www.vector.co.jp/soft/dos/util/se023753.html |
|
this article refers Vector Soft Library..
|
|
933) Re6:テキストファイルに一度に改行を含む文字列を出力したい shira 2004/10/14(木) 13:06 |
|
|
|
>なんとしても1行で処理したいのなら、フリーソフト(BATUTY)を使って以下のような方法で実現可能です。 > >bu !echo abc$Mdef > >"$M"がCR,LFに変換されて出力されます。 > >BATUTY 1.11 >bu111.lzh >http://www.vector.co.jp/soft/dos/util/se023753.html Hellcatさま、ご回答ありがとうございます。 Win2000サーバーで起動するプログラムからDosコマンドを発行するという処理で、 サーバー上にソフトをインストールするのが不可能な為、今回は見送ります。 親身に考えて下さり、感謝します。またよろしくお願いします。 |
|
- ◆917. テキストファイルに一度に改行を含む文字列を出力したい (shira)
2004/10/12(火) 21:19
- 922. Re:テキストファイルに一度に改行を含む文字列を出力したい (oo)
2004/10/13(水) 00:26
- 923. Re2:テキストファイルに一度に改行を含む文字列を出力したい (shira)
2004/10/13(水) 09:27
- 924. Re3:テキストファイルに一度に改行を含む文字列を出力したい (oo)
2004/10/13(水) 16:00
- 926. Re4:テキストファイルに一度に改行を含む文字列を出力したい (shira)
2004/10/13(水) 17:52
- 927. Re5:テキストファイルに一度に改行を含む文字列を出力したい (oo)
2004/10/13(水) 19:39
- 932. Re6:テキストファイルに一度に改行を含む文字列を出力したい (shira)
2004/10/14(木) 12:57
- 934. Re7:テキストファイルに一度に改行を含む文字列を出力したい (oo)
2004/10/14(木) 15:55
- 935. Re8:テキストファイルに一度に改行を含む文字列を出力したい (shira)
2004/10/14(木) 17:03
- 936. Re9:テキストファイルに一度に改行を含む文字列を出力したい (oo)
2004/10/14(木) 19:00
- 939. ありがとうございました! (shira) 2004/10/15(金) 09:25
- 936. Re9:テキストファイルに一度に改行を含む文字列を出力したい (oo)
2004/10/14(木) 19:00
- 935. Re8:テキストファイルに一度に改行を含む文字列を出力したい (shira)
2004/10/14(木) 17:03
- 934. Re7:テキストファイルに一度に改行を含む文字列を出力したい (oo)
2004/10/14(木) 15:55
- 932. Re6:テキストファイルに一度に改行を含む文字列を出力したい (shira)
2004/10/14(木) 12:57
- 929. Re5:テキストファイルに一度に改行を含む文字列を出力したい (Hellcat)
2004/10/13(水) 20:07
- 933. Re6:テキストファイルに一度に改行を含む文字列を出力したい (shira) 2004/10/14(木) 13:06
- 927. Re5:テキストファイルに一度に改行を含む文字列を出力したい (oo)
2004/10/13(水) 19:39
- 926. Re4:テキストファイルに一度に改行を含む文字列を出力したい (shira)
2004/10/13(水) 17:52
- 924. Re3:テキストファイルに一度に改行を含む文字列を出力したい (oo)
2004/10/13(水) 16:00
- 923. Re2:テキストファイルに一度に改行を含む文字列を出力したい (shira)
2004/10/13(水) 09:27
- 922. Re:テキストファイルに一度に改行を含む文字列を出力したい (oo)
2004/10/13(水) 00:26