0

info.txt という名前のテキスト ファイルがあります。このテキスト ファイルには、次のような行内に多数のタグが含まれる多数の長い行が含まれています。

A bunch of usless info {tag15}data data{Tag1}data {Tag2}data {Tag11}data {Tag1}data {Tag2}

したがって、このドキュメントでは、{Tag15} を見つけて、{Tag15} と {Tag11} の間のすべてをプルするか、別の {Tag15} である可能性があり、そのデータのセグメントを新しいテキスト ファイルにドロップする必要があります。そのため、15.txt と 11.txt が 1 つずつあり、データと次のタグ文字列の間のすべてのタグを含む適切なデータ セグメントが含まれています。したがって、この例では 15.txt に次のものが含まれます。

{tag15}data data{Tag1}data {Tag2}data data
{tag15}data data{Tag1}data {Tag2}data data data data {Tag3}data 
{tag15}data data{Tag1}data {Tag2}data 

11.txt には次のものが含まれます。

{Tag11}data {Tag1}data {Tag2}data data data {Tag3}data
{Tag11}data {Tag1}data {Tag2}data
{Tag11}data {Tag1}data {Tag2}data data

これを行う最も論理的な方法は、すべての Tag15 と Tag11 を見つけて新しい行に移動することです。これにより、データ セットの長さを決定する必要がなくなります。 . 別の findstr を介してファイルを処理し、一致する各行を適切なファイルに引き出します。{tag15} または {tag11} が見つかった行の正確な位置に新しい行を挿入する方法がわかりません。何かご意見は?

テキスト ファイルには合計で約 200 ~ 300 個のタグ セットが含まれており、これらを解析して適切な txt ファイルに分類する必要があります。あなたが提供できる助けを前もって感謝します。

私はバッチ以外のソリューションにもオープンです。

編集:

ここでさらに情報が必要な理由は理解できますが、そもそも提供できなかったことをお詫び申し上げます。したがって、ソース ファイルの各行のタグ セグメントは常に {tag15} または {tag11} で始まりますが、そのセグメント内に続くタグは、プッシュされるデータによって異なります。たとえば、Tag2 に Y が入力されている場合などです。 Tag3 は必須ですが、Tag2 が N の場合、Tag3 はセグメントに存在しませんが、tag5、6、または 200 は存在する可能性があります。これが、Tag15 または 11 を見つけてそれ自体の行に移動するのが最善だと感じた理由です。これにより、移動する文字列の長さを決定しようとすることに依存する必要がなくなります。例の 15.txt と 11.txt は、セグメントごとに異なるデータが原因でどのように見えるかを説明するためのものですが、これらを生成したソース ファイルは次のようになります。

Line1: FirstLast 55555555 10092013 0000000 {tag15}data data{Tag1}data {Tag2}data data {tag15}data data{Tag1}data {Tag2}data data data data {Tag3}data {Tag11}data {Tag1}data {Tag2}data data data {Tag3}data
Line2: FirstLast 444444444 10092013 000000005 {Tag11}data {Tag1}data {Tag2}data {tag15}data data{Tag1}data {Tag2}data {Tag11}data {Tag1}data {Tag2}data data

私の考えでは、すべてのデータが含まれているこのファイルを取得し、Tag15 と Tag11 を見つけて、それらを独自の行に移動すると、ファイルは次のようになります。

FirstLast 55555555 10092013 0000000 
{tag15}data data{Tag1}data {Tag2}data data 
{tag15}data data{Tag1}data {Tag2}data data data data {Tag3}data 
{Tag11}data {Tag1}data {Tag2}data data data {Tag3}data
FirstLast 444444444 10092013 000000005 
{Tag11}data {Tag1}data {Tag2}data 
{tag15}data data{Tag1}data {Tag2}data 
{Tag11}data {Tag1}data {Tag2}data data

各行が独自のセグメントになったので、Findstr を使用して For ループを実行し、行を正しい txt ファイルにエコーします。前述の私の最大の問題は、抽出しようとしている文字列の正確な長さを知らなくてもファイルをソートできるように、ファイルを元の状態から上記の例に戻す方法がわからないことです。これが役立つことを願っています

4

2 に答える 2

0

これは、 http://www.dostips.com/forum/viewtopic.php?f=repl.bat 3&t=3855から呼び出されるヘルパー バッチ ファイルを使用します。

repl.batバッチファイルとテキストファイルと同じフォルダに入れます。

ファイルのサンプルでこのコマンドを試してiくださいix。タグの大文字と小文字が異なるため、大文字と小文字を区別しないようにするためです。

type file.txt |repl "{tag15}" "\r\n{tag15}" ix |repl "{tag11}" "\r\n{tag11}" ix >newfile.txt

タスクはまだ非常に曖昧/不明確です。

于 2013-10-09T17:21:55.737 に答える