テキスト ファイルを 1 行ずつ読み取るにはどうすればよいですか。以下のコードを使用すると、JSL スクリプトを 1 行ずつ読み取ることができます (実際には、JMP は各行をリスト項目としてリストを作成します)。
myFile= open("$PATH\testScript.jsl");
myCfLines = myFile[scriptBox(1)] << getLines();
ただし、拡張子「*.txt」を持つテキスト ファイルでこれを実行しようとすると、JMP はこれをデータ テーブルとして自動的に開くため、このメソッドを使用して行を取得することはできません (これはスクリプト ボックスではないためです!)。
別の方法はありますか? loadTextFile() 関数は、ファイル全体を文字列にスクレイピングするため、使用したくありません。 理想的には、ファイルを開いて、一度に 1 行ずつ読み取り、正規表現を実行して必要なデータを取り出したいと考えています。
Re: テキスト ファイルを 1 行ずつ読み取るにはどうすればよいですか。JMP はテキスト ファイルをストリーミングしません。 このソリューションを使用してファイル全体をロードしてから、行を分割する必要があります。 リスト内の項目 (個々の行) を反復処理して、それらが基準を満たしているかどうかを判断できます。
あるいは、テキスト ファイルを Excel ワークブックにインポートし、[ファイル] > [データベース] > [テーブルを開く] または [ファイル] > [データベース] > [クエリ ビルダー] を使用して WHERE 句を定義し、抽出する行を選択することもできます。
Re: テキスト ファイルを 1 行ずつ読み取るにはどうすればよいですか。巨大なテキストファイルがありますが、数行だけを読み込んでロードしたいのですが、基本的にはA_、B_、C_、またはD_で始まるすべての行をロードしたいと考えています。 条件が機能すればできるでしょうか?
Re: テキスト ファイルを 1 行ずつ読み取るにはどうすればよいですか。最初はloadTextFile関数に消極的だったにもかかわらず、これに関してはジェフに感謝の気持ちを伝えなければなりません。 3 つの方法はすべて機能するため、テスターの 1 人が作成した 250M、5M 行のテキスト ファイルを使用して簡単に時間を比較してみました。 ちなみに、私の使用例は、これらの巨大なログ ファイルを 1 行ずつ選別し、正規表現のテーブルに基づいて一部の結果をフィルタリングする必要があるということです。
私がloadTextFileを避けたかったと述べたので、これは公平ではないと思います;)
***イアン ***
myNumSeconds = 66;
N アイテム(myCfLines) = 5059756;
***ジェフ***
myNumSeconds = 7;
N アイテム(myLines) = 5059755;
*** クレイジ ***
myNumSeconds = 67;
N アイテム(myCfLines) = 5059756;
Re: テキスト ファイルを 1 行ずつ読み取るにはどうすればよいですか。これを機能させるために開くことができる「スクリプト」オプションがあります。
open("$sample_data/../データのインポート/bigclass.txt","script")
これで、「テキスト」として開いて (拡張子 .txt のデフォルトの機能です) データ テーブルを作成する代わりに、スクリプト ウィンドウが開きます。 はい、「テキスト」オプションの名前は奇妙なものですが、これは CSV テキストを指します。
Re: テキスト ファイルを 1 行ずつ読み取るにはどうすればよいですか。JSL には現在、ファイルを開いて一度に 1 行ずつ読み取るツールがありません。
ただし、使用する場合は、テキストファイルをロード()その後、を使用できます言葉()個々の行をリストに取り込む関数。
bctxt=load text file ("$SAMPLE_IMPORT_DATA\Bigclass.txt");
lines=words(bctxt,"\!n");
Re: テキスト ファイルを 1 行ずつ読み取るにはどうすればよいですか。ご覧のとおり、JMP はファイル拡張子を使用して適切な処理を試みます。
あなたのユースケースを完全に理解しているかどうかはわかりませんが、「.jsl」拡張子で希望の動作が得られる場合は、「RenameFile()」の使用を検討できます。
renameFile("$DESKTOP/Test.txt", "Test.jsl");
myFile = open("$DESKTOP/Test.jsl");
myCfLines = myFile[scriptBox(1)] << getLines();
renameFile("$DESKTOP/Test.jsl", "Test.txt");