0,50,10,20,99,
と数字がカンマ区切りで入力されているテキストデータを読み込んで、AfterEffectsのエフェクトにスクリプトでキーフレームを入力したいと考えております。
<スクリプト>
aTime = 0;
fps = 1/30;
layObj = app.project.activeItem.selectedLayers[0];
filename = File.openDialog("ファイルを選択してください","");
fileObj = new File(filename);
if (fileObj.open("r"))
{
while(!fileObj.eof)
{
txt = fileObj.readln();
txt = txt.split(",");
layObj("Effects")("シャープ")["シャープ量"].setValueAtTime(aTime,txt[0]);
layObj("Effects")("シャープ")["シャープ量"].setInterpolationTypeAtKey(1,KeyframeInterpolationType.BEZIER);
aTime = aTime + fps;
}
}
上記のコードだと0フレーム目に0としかキーが打たれません。
0,
50,
10,
20,
99,
と改行すれば、意図したように1フレームずつテキストのキーが打たれてうまくいきます。
『改行されていないカンマ区切りの数値データ』を読み取みとりたいので、どうコードを変更したらよろしいでしょうか?
よろしくおねがいいたします。
No.1ベストアンサー
- 回答日時:
こんにちは
AfterEffectsを存じませんので、原因と対処法の考え方のみですが・・・
ご提示の構文だと
> while(!fileObj.eof) {
> // データ記入の処理
> }
として、ファイルの最終行まで1行ずつ処理を繰り返すような記述になっていますが…
>と改行すれば、~~~うまくいきます。
と書かれている様に、改行がないカンマ区切りのデータは1行しかありませんので、上記の繰り返しは一度しか行われません。
(最初の1行を読み込んだ際に txt = "0,50,10,20,99,"と同等になります。)
この結果、ご質問のようなことになっているものと思われます。
では、「0」以外のデータはどうなっているかと言えば、
> txt = txt.split(",");
としているので、変数txtは配列となり、[ 0, 50, 10, 20, 99, ]の値を保持しています。
それなので、ファイルの読み込みでループするのではなく、この配列の値に対してループなされば、意図するようになるはずです。
考え方のイメージとしては、
for(var i=0; i<txt.length; i++) {
// データ txt[i] を利用した処理
}
といった感じです。
※ タイポなのかどうかは不明ですが、ご提示の質問文では99の後にもカンマがあります。
もしもデータがこの通りであるなら、配列のtxt.lengthは6で、txt[5]の値は""となります。
想像するところ最後のデータは余分だと思いますので、元データのカンマの有無に応じてループの回数を調整するか、あるいは、データの値をチェックしてから処理するなどの配慮が必要になるかも知れませんね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでエクセルをtxtに変換するとエクセルでカンマを含む文字数字がtxtでは「""」付にならないよ 1 2022/08/27 12:17
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- PHP 文字列を段落で分ける方法を教えて下さい。 2 2023/03/09 10:03
- その他(プログラミング・Web制作) ラズパイ上の、pythonのエラーについて 1 2023/04/12 23:27
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perlによるディレクトリ内の連...
-
ifstream を利用した1行分のテ...
-
テキストファイルの各行を配列...
-
Pythonでegrep機能をつかいたい
-
一行だけ読込
-
perlプログラム 外部複数ファ...
-
window.open でのファイル指定方法
-
awkスクリプトでダブルクォーテ...
-
VBAでCSVファイルの特定行を書...
-
VBAでCSVファイルを途中行まで...
-
batファイルでrenameができませ...
-
【エクセル】改行無しテキスト...
-
Perlで特定文字列から特定文字...
-
perlのflock関数でロックをかけ...
-
close()で例外が投げられる理由
-
ExcelをCSV書き出す場合のシー...
-
Perl で ディレクトリ及びサブ...
-
バッチファイルの作り方(CSV→...
-
vba dir の相対パス
-
パスから最後のディレクトリだ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル名を複数個配列で確保...
-
「パスが見つかりません」とい...
-
ifstream を利用した1行分のテ...
-
C++でのテキストファイル読み込...
-
perlプログラム 外部複数ファ...
-
Visual Basicを使って三平方の...
-
連番のファイルを何個も開きたい
-
perlの引数で複数のファイル処...
-
テキストファイルの各行を配列...
-
Perl エラーログを指定の場所...
-
Fortranで1行飛ばして読み込む方法
-
CGIで複数のデータファイルを利...
-
バッチファイルでテキストファ...
-
ファイルの作成と書き込み
-
shellのコマンド deffの差分の...
-
シェル(ksh)でテキスト文書を変換
-
CSVファイルを読み込み、ファイ...
-
【Javascript】改行されていな...
-
Perl Grepについて
-
一行だけ読込
おすすめ情報