[前の記事]« Win2000/XP:「YYYYMMDD_hhmmss」形式のバックアップファイル名をつけるには
[次の記事]名前に日付がついたファイルから最新のものを検出し、その日付を年月日に分解して変数に格納 »

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

▲カテゴリー「FIND,FINDSTR,SORT…テキストファイル内文字列の操作」索引へ
▲カテゴリー「FOR /F」索引へ

ファイル内の特定番地から指定の長さの文字列を抽出したい

669) 検索結果をRenameのファイル名にしたい ししる 2003/10/08(水) 16:25


先程、同じような質問をさせて頂いたので大変恐縮なのですが・・・。

あるDatファイル「test.dat」の「n」バイト目から「n+x」バイト目の文字を抽出し、
さらにその抽出した文字で先程のDatファイル「test.dat」をRenameしたいのですが、できるのでしょうか?

※「test.dat」⇒「抽出した文字.dat」

ちなみに先程教えて頂いたサンプルをつかって単純に、

set words=%kekka:~0,10%
ren c:\FTP\Send\ファクタリングデータ\before.txt %words%.txt

とやってみたらエラーとなってしまいました。

ren c:\FTP\Send\ファクタリングデータ\before.txt %username%.txt

は出来たので、出来るのかと思ったのですが・・・。

宜しくお願いします。


670) Re:検索結果をRenameのファイル名にしたい じゃく 2003/10/08(水) 16:43


こんにちは

>ちなみに先程教えて頂いたサンプルをつかって単純に、

>set words=%kekka:~0,10%
>ren c:\FTP\Send\ファクタリングデータ\before.txt %words%.txt

>とやってみたらエラーとなってしまいました。

何というエラーメッセージがでたのでしょうか?

>ren c:\FTP\Send\ファクタリングデータ\before.txt %username%.txt

>は出来たので、出来るのかと思ったのですが・・・。

echo %words%
を挿入してみて、抽出した単語がどのようなものか示して
いただけますか?ファイル名に使用できない文字が入っている
可能性もあります。(コロンとか)


671) Re2:検索結果をRenameのファイル名にしたい ししる 2003/10/08(水) 16:54


こんにちは、じゃくさん


>>ちなみに先程教えて頂いたサンプルをつかって単純に、
>>
>>set words=%kekka:~0,10%
>>ren c:\FTP\Send\ファクタリングデータ\before.txt %words%.txt
>>
>>とやってみたらエラーとなってしまいました。

>何というエラーメッセージがでたのでしょうか?

「コマンドの構文が誤っています」と表示されました。

>>ren c:\FTP\Send\ファクタリングデータ\before.txt %username%.txt
>>
>>は出来たので、出来るのかと思ったのですが・・・。

>echo %words%
>を挿入してみて、抽出した単語がどのようなものか示して
>いただけますか?ファイル名に使用できない文字が入っている
>可能性もあります。(コロンとか)

検索先のファイルは私が作ったので
1abc
2def
3ghi
4jkl
・・・

と入っています。
検索したのは「1」なので、
「abc」と表示されました。

以上です。
宜しくお願いします。




674) Re3:検索結果をRenameのファイル名にしたい じゃく 2003/10/08(水) 18:20


>「コマンドの構文が誤っています」と表示されました。

空白が入っていませんか?

echo ===%words%===
を挿入してみて、抽出した単語に空白が含まれていないか
確認していただけますか?

ren test.txt abc .txt
で実験したら同様のエラーが表示されました。

もし、空白を含めたファイル名にしたい場合は、
ren c:\FTP\Send\ファクタリングデータ\before.txt %words%.txt


ren c:\FTP\Send\ファクタリングデータ\before.txt "%words%.txt"
とダブルクォーテーションでくくってみてください。


675) Re4:検索結果をRenameのファイル名にしたい ししる 2003/10/08(水) 18:31


ししるです。


>>「コマンドの構文が誤っています」と表示されました。

>空白が入っていませんか?

>echo ===%words%===
>を挿入してみて、抽出した単語に空白が含まれていないか
>確認していただけますか?
>ren test.txt abc .txt
>で実験したら同様のエラーが表示されました。
>もし、空白を含めたファイル名にしたい場合は、
>ren c:\FTP\Send\ファクタリングデータ\before.txt %words%.txt

>を
>ren c:\FTP\Send\ファクタリングデータ\before.txt "%words%.txt"
>とダブルクォーテーションでくくってみてください。

おっしゃるとおりです。
===abc ===
と表示されました。
改行コードが入っていました。
すみませんでした。






676) Re5:検索結果をRenameのファイル名にしたい じゃく 2003/10/08(水) 18:47


こんばんは。

>===abc ===
>と表示されました。
>改行コードが入っていました。
>すみませんでした。

原因が分かって良かったですね。
本当に実行したいファイルではこんな事はないのだと思いますが、
また解らないことがあれば質問してください。
ここには詳しい人がたくさんいますので。


677) Re6:検索結果をRenameのファイル名にしたい ししる 2003/10/08(水) 19:50


ししるです。

>こんばんは。

>>===abc ===
>>と表示されました。
>>改行コードが入っていました。
>>すみませんでした。

>原因が分かって良かったですね。
>本当に実行したいファイルではこんな事はないのだと思いますが、
>また解らないことがあれば質問してください。
>ここには詳しい人がたくさんいますので。

ありがとうございます。
すみません、検索の方が・・・

(スペース区切り無しの)固定長データで、400バイト目から15バイト分を抽出したいのですが、これって出来るのでしょうか?

sabstrみたいなコマンドは無いみたいだし・・・。








678) Re7:検索結果をRenameのファイル名にしたい じゃく 2003/10/08(水) 19:58


>(スペース区切り無しの)固定長データで、400バイト目から15バイト分を抽出したいのですが、これって出来るのでしょうか?

>sabstrみたいなコマンドは無いみたいだし・・・。

固定長データは全体で(または1レコード)何バイトありますか?
バイナリデータですか、半角英数字ですか?
2バイトコード(漢字)は入っていますか?
断片的ではなく全体像を記述していただくと、わかりやすいのですが。
環境変数に格納した文字の400文字目から15文字を取り出すなら
set kekka=%kekka:400,15%
なのですが、漢字も半角英数字も1文字で数えるので、
400バイトと一致しない可能性があります。
あと、固定長データの長さによっては環境変数に収まりきらない
可能性があります。バイナリデータだとバッチではお手上げかも。


679) Re8:検索結果をRenameのファイル名にしたい ししる 2003/10/08(水) 21:38


こんばんは ししるです。

>>(スペース区切り無しの)固定長データで、400バイト目から15バイト分を抽出したいのですが、これって出来るのでしょうか?
>>
>>sabstrみたいなコマンドは無いみたいだし・・・。

>固定長データは全体で(または1レコード)何バイトありますか?
512バイトあります。

>バイナリデータですか、半角英数字ですか?
半角英数字です。

>2バイトコード(漢字)は入っていますか?
入っていません。

>断片的ではなく全体像を記述していただくと、わかりやすいのですが。

すみません。
気を付けます。

>環境変数に格納した文字の400文字目から15文字を取り出すなら
>set kekka=%kekka:400,15%
>なのですが、漢字も半角英数字も1文字で数えるので、
>400バイトと一致しない可能性があります。
>あと、固定長データの長さによっては環境変数に収まりきらない
>可能性があります。バイナリデータだとバッチではお手上げかも。


半角英数字で、漢字コードも入っていないのですが、なぜか6バイトずれて表示されてしまいました。
よくよく調べてみたところ、数字の「1」が読まれないようです。

データ上(0~10バイト)に
aabbccddeeff

とある場合、
set words=%kekka:~0,10%
echo ===%words%===

とすると

===aabbccddee===

と、表示されますが、

データ上(0~10バイト)に
aabbccdd11ff

とある場合、
set words=%kekka:~0,10%
echo ===%words%===

とすると

===aabbccddff===

と表示されてしまいます。
(ちなみに「1」を「2」にしたら 「===aabbccdd22===」と表示されました。)

これは何故なのでしょうか?
もし、何かお気づきの点がありましたらコメントお願いします。


681) Re9:検索結果をRenameのファイル名にしたい じゃく 2003/10/09(木) 06:20


>半角英数字で、漢字コードも入っていないのですが、なぜか6バイトずれて表示されてしまいました。
>よくよく調べてみたところ、数字の「1」が読まれないようです。

>これは何故なのでしょうか?
>もし、何かお気づきの点がありましたらコメントお願いします。

前回のバッチを元に検証されていますよね。
今回もご自身で作られた test.txt でテストされてますか?
テストファイルは、前回同様、

1aabbccdd11ff
2gghhiijj22kk
...
...


という感じではないでしょうか。
前回のバッチを作る際に、条件として
「検索するキーワードはユニーク」という条件があったので、
キーワードとなる文字をすべて消してから、10文字分を取り出す
よう作ってあります。
検索キーワードが1で検証されていませんか?
(的はずれでしたらごめんなさい)

もし、検索キーワードとその後の文字列に同じ文字列が出てくるような
場合は、最初のバッチを作り替える必要がありますので、ご自身が希望
される動作の条件を詳しく書いてください。


683) Re10:検索結果をRenameのファイル名にしたい ししる 2003/10/09(木) 13:13


ししるです。

>>半角英数字で、漢字コードも入っていないのですが、なぜか6バイトずれて表示されてしまいました。
>>よくよく調べてみたところ、数字の「1」が読まれないようです。

>>これは何故なのでしょうか?
>>もし、何かお気づきの点がありましたらコメントお願いします。

>前回のバッチを元に検証されていますよね。
>今回もご自身で作られた test.txt でテストされてますか?
>テストファイルは、前回同様、

>1aabbccdd11ff
>2gghhiijj22kk
>...
>...


>という感じではないでしょうか。
>前回のバッチを作る際に、条件として
>「検索するキーワードはユニーク」という条件があったので、
>キーワードとなる文字をすべて消してから、10文字分を取り出す
>よう作ってあります。
>検索キーワードが1で検証されていませんか?
>(的はずれでしたらごめんなさい)

はい、おっしゃるとおりです。

>もし、検索キーワードとその後の文字列に同じ文字列が出てくるような
>場合は、最初のバッチを作り替える必要がありますので、ご自身が希望
>される動作の条件を詳しく書いてください。

希望の動作としては

「固定長のデータファイル(test.dat)の400バイト目から10バイト分のデータ(400~410バイト分のデータ)を抽出したい」

ということになります。




690) Re11:検索結果をRenameのファイル名にしたい じゃく 2003/10/10(金) 16:13


>希望の動作としては

>「固定長のデータファイル(test.dat)の400バイト目から10バイト分のデータ(400~410バイト分のデータ)を抽出したい」

>ということになります。

まだよくわかりません。
test.dat は半角英数字が何バイトぐらい続くのでしょうか?
途中に改行などいっさい無いのかな。
400バイト目から10バイトなら、先頭から400-409バイトですよね。
もう、キーワードとか関係なくなったのでしょうか?


692) Re12:検索結果をRenameのファイル名にしたい ししる 2003/10/10(金) 18:39


ししるです。


>>希望の動作としては
>>
>>「固定長のデータファイル(test.dat)の400バイト目から10バイト分のデータ(400~410バイト分のデータ)を抽出したい」
>>
>>ということになります。

>まだよくわかりません。
>test.dat は半角英数字が何バイトぐらい続くのでしょうか?
>途中に改行などいっさい無いのかな。

改行無しの512バイトです。

>400バイト目から10バイトなら、先頭から400-409バイトですよね。

すみません。その通りです。

>もう、キーワードとか関係なくなったのでしょうか?

はい、せっかく作っていただいたのに申し訳ありません。

「512バイトのデータの400バイト目から10バイトを抽出したい」
ということです。

宜しくお願いします。


698) Re13:検索結果をRenameのファイル名にしたい じゃく 2003/10/14(火) 08:54


>>>希望の動作としては
>>>
>>>「固定長のデータファイル(test.dat)の400バイト目から10バイト分のデータ(400~410バイト分のデータ)を抽出したい」
>>>
>>>ということになります。
>>
>>まだよくわかりません。
>>test.dat は半角英数字が何バイトぐらい続くのでしょうか?
>>途中に改行などいっさい無いのかな。

>改行無しの512バイトです。

>>400バイト目から10バイトなら、先頭から400-409バイトですよね。

>すみません。その通りです。

>>もう、キーワードとか関係なくなったのでしょうか?

>はい、せっかく作っていただいたのに申し訳ありません。

>「512バイトのデータの400バイト目から10バイトを抽出したい」
>ということです。

>宜しくお願いします。


提示いただいた条件で動作するバッチを作りました。
(というよりほとんど前のバッチと変わってません)
ただ、Windows2000で環境変数に512バイトもセットできるか
わからなかったので検証してから掲示しようと思ってました。
やっと検証できましたので掲示します。

@echo off
for /F "tokens=* delims=" %%l in (test.dat) do set kekka=%%l
set words=%kekka:~399,10%
echo %words%
set kekka=


699) Re14:検索結果をRenameのファイル名にしたい ししる 2003/10/14(火) 13:36


ししるです。

じゃくさん、色々とありがとうございました。

PS:もうちょっと修行して出直します。

>>>>希望の動作としては
>>>>
>>>>「固定長のデータファイル(test.dat)の400バイト目から10バイト分のデータ(400~410バイト分のデータ)を抽出したい」
>>>>
>>>>ということになります。
>>>
>>>まだよくわかりません。
>>>test.dat は半角英数字が何バイトぐらい続くのでしょうか?
>>>途中に改行などいっさい無いのかな。
>>
>>改行無しの512バイトです。
>>
>>>400バイト目から10バイトなら、先頭から400-409バイトですよね。
>>
>>すみません。その通りです。
>>
>>>もう、キーワードとか関係なくなったのでしょうか?
>>
>>はい、せっかく作っていただいたのに申し訳ありません。
>>
>>「512バイトのデータの400バイト目から10バイトを抽出したい」
>>ということです。
>>
>>宜しくお願いします。
>>

>提示いただいた条件で動作するバッチを作りました。
>(というよりほとんど前のバッチと変わってません)
>ただ、Windows2000で環境変数に512バイトもセットできるか
>わからなかったので検証してから掲示しようと思ってました。
>やっと検証できましたので掲示します。

>@echo off
>for /F "tokens=* delims=" %%l in (test.dat) do set kekka=%%l
>set words=%kekka:~399,10%
>echo %words%
>set kekka=

 
 


カテゴリー「FIND,FINDSTR,SORT…テキストファイル内文字列の操作」索引へ
カテゴリー「FOR /F」索引へ

 

カテゴリー一覧

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


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

資料書籍

About

2003年10月08日 16:28に投稿されたエントリーのページです。

ひとつ前の投稿は「Win2000/XP:「YYYYMMDD_hhmmss」形式のバックアップファイル名をつけるには」です。

次の投稿は「名前に日付がついたファイルから最新のものを検出し、その日付を年月日に分解して変数に格納」です。

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

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