[前の記事]« Win95のHelpはどこ?
[次の記事][Win98] スクロールバーの出し方 »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「リダイレクト処理、パイプ処理」索引へ

Win2000: 改行を含む文字列を一度のリダイレクトで出力したい

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
            •  929.  Re5:テキストファイルに一度に改行を含む文字列を出力したい (Hellcat)   2004/10/13(水) 20:07
              •  933.  Re6:テキストファイルに一度に改行を含む文字列を出力したい (shira)   2004/10/14(木) 13:06
 
 


カテゴリー「リダイレクト処理、パイプ処理」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2004年10月12日 00:15に投稿されたエントリーのページです。

ひとつ前の投稿は「Win95のHelpはどこ?」です。

次の投稿は「[Win98] スクロールバーの出し方」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
このブログについて | 運営:有限会社メディアポート