4

以前のドライバー バージョンでは機能していたが、新しいドライバー バージョンでは古くなっているファイルが 50 個以上あります。その結果、さまざまな変数名またはフィールド名を見つけて置換し、場合によってはこれらすべてのファイルの変数入力を編集する必要があります。たとえば、次の行を見つけたい

src.aaaa = 100;

それを次のように置き換えます。

src.bbbb = 100;

別の例は、次のように置き換えることです。

vid = videoinput('xxxx' ,1, 'yyy')

と:

vid = videoinput('kkkkkk' ,1, 'zzzz')

このディスカッションを検索して見つけました。これにより、複数のファイルを検索できますが、実際には何も編集または置換できません。私はmatlabを扱うことができるので、matlabでそれを行う方法を探しています。何か案は?

4

4 に答える 4

3

投稿した「ファイルの検索」ダイアログ (Ctrl-Shift-F) を使用して、探している各ファイルを見つけてから、変更する特定の行を「検索して置換」(Ctrl+F) することができます。

src.aaaa = 100;例として、 Ctrl+Shift+F を使用してファイルを検索します。次に Ctrl+F をsrc.aaaa = 100;押して、上部のテキスト ボックスとsrc.bbbb = 100;下部のテキスト ボックスに追加します。

あなたの投稿から、これらの m ファイルで変更したい行数がわからないため、これが実現可能かどうかは不明です。いくつありますか?m ファイルは類似していますか、それともすべて異なっていますか?

検索する特定の変数がある場合は、関数を使用してすべての m ファイルをループ検索するスクリプトを作成できますdir。を使用して、m ファイルを文字列変数に読み取りますfscanf。次に、 を使用して文字列内の変数を置き換えますstrrep。最後fprintfに、修正された変数を使用して新しい .m ファイルに書き込みます。

参照する:

于 2013-02-12T21:13:45.957 に答える
2

ボックスの少し外側-しかし、私はsedsystemコマンドを使用します-それはあなたが望むことを正確に行い、それをすばやく実行しますが、それを呼び出してコマンド文字列を構築する必要があります. Windows を使用している場合は、msysまたはcygwinを介してインストールする必要がある場合があります。

于 2013-02-12T23:15:30.547 に答える
1

Sekkou の提案を実装する m-File:

clear all;
clc;


%% Parameter

directory           = 'd:\xxx';
oldString           = 'the old text';
newString           = 'the new text';
regularExpression   = '[\w]+\.m';


%% Determine files to manipulate

cd(directory)

allFilesInDirectory = dir;


%% Manipulieren der verweneten Dateien

disp('Manipulated Files:');

for idx = 1 : length(allFilesInDirectory)

    if (~isempty ( regexp(allFilesInDirectory(idx).name, '[\w]+\.m','match') ))

        disp(allFilesInDirectory(idx).name);

        % Read and manipulate Text
        fileIdRead  = fopen(allFilesInDirectory(idx).name, 'r');
        fileText    = fscanf(fileIdRead,'%c');

        fileTextNew = strrep(fileText, oldString, newString);

        fclose(fileIdRead);


        % Write Text
        fileIdWrite = fopen(allFilesInDirectory(idx).name, 'w');

        fprintf(fileIdWrite, '%c', fileTextNew);

        fclose(fileIdWrite);
    end

end
于 2014-08-21T06:43:29.357 に答える