メインコンテンツまでスキップ

データファイルの行と列とのやり取り

スプレッドシートに含まれるデータセットは、カンマ区切りの値(.csv)ファイルとしてエクスポートできます。これらのファイルは、Eggplant FunctionalのSenseTalkスクリプトを使用して、ローカルファイルシステム上で直接操作できます。

ヘッダー名と行名によるセル値の取得

以下の例は、ローカルファイルシステムにあるスイートのリソースペインに配置されたデータファイルとやり取りし、処理するためのSenseTalkスクリプトの設定方法を示しています。

この例では、DemoLanguage.txtファイルがリソースペインに配置され、次のデータが含まれています。

RefWord,English,German,French,Japanese,ChinesePRC,ArabicHello,Hello,Hallo,Bonjour,こんにちは,你好,مرحبا,Testing,Testing,Testen,essai,検査,测试,تجريب,Goodbye,Goodbye,Auf Wiedersehen,Au Revoir,さようなら,再见,وداعا,

DemoLanguage.txtファイルには、hellogoodbyetestingの3つの単語のみがいくつかの言語で含まれていることに注意してください。この例では、"English"言語と"hello"単語を使用しています。OCR検索が機能するためには、SUTの画面上のどこかに"hello"単語が配置されている必要があります。

ノート

この例が機能するようになったら、DemoLanguage.txtファイルに含まれる他の言語や単語を試してみてください。

Primaryスクリプトは、ヘッダー名"English"と行名"hello"TextLoc関数に渡します。この関数は、DemoLanguage.txtデータファイルを処理し、ヘッダー("English")の列と渡された単語("hello")の行を見つけます。次に、スクリプトはそのヘッダーと行名のセル値を使用します。

Primaryスクリプトは以下の通りです。

set global MyLanguage to "English"
doubleclick textLoc ("hello")

TextLocスクリプトは以下の通りです。

params MyWord
put ResourcePath("DemoLanguage.txt") into FilePath
repeat with each item MyItem of firstline
if MyItem = global MyLanguage
put repeatindex() into MyColumn
end if
end repeat
repeat with each line of file FilePath
if item 1 of it = MyWord
put repeatindex() into MyRow
end if
end repeat
log "Trying to find" && item MyColumn of line MyRow of file FilePath
return ImageLocation (Text:item MyColumn of line MyRow of file FilePath, Language:global MyLanguage)

この例を実行するには、以下の手順を実行します。

  1. 上記のコードを使用して、PrimaryおよびTestLocスクリプトをスイートに追加します。

  2. 上記のファイル内容を使用して、DemoLanguage.txtファイルをスイートのリソースペインに追加します。

  3. TextLocスクリプトのOCR検索が正常に機能するように、SUTの画面上のどこかに"hello"を追加します。

  4. Primaryスクリプトを実行し、次のような出力を確認します。

    8/8/17, 10:15:23 AM START Running PRIMARY.script8/8/17, 10:15:23 AM Log Trying to find Hello8/8/17, 10:15:26 AM imagelocation (TEXT:"Hello") at (328, 156)8/8/17, 10:15:26 AM doubleclick at (328, 156)8/8/17, 10:15:26 AM EndTestCase (Duration:"3.033", Errors:"0", Exceptions:"0", StartTime:"2017-08-08 10:15:23 -0600", Successes:"1", TestCase:"PRIMARY.script", Warnings:"0")8/8/17, 10:15:26 AM SUCCESS Execution Time 0:00:03 PRIMARY.script

.csvファイルの作成

以下の例は、ローカルファイルシステム上のファイルとやり取りする別の方法を示しています。この場合、使用されるファイルは、列識別子を持つヘッダ行を含む.csvファイルで、その後ろにカンマ文字で区切られたデータ行が続きます。

このコードのセクションは、.csvファイルの作成に関するものです。すでに使用したい.csvファイルがある場合は、セクション2にスキップできます。

-- ファイルの名前を定義する
set myFile to env("temp") & "\myDataFile.csv"
-- Macを使用している場合、env("TMPDIR")を使用することができます
-- ファイルにデータを追加します。'after'コマンドにより、既存のコンテンツを上書きするのではなく、ファイルにテキストが追加されます:
put "Name,Email,Password" after file myFile
put "John Doe,john@doe.com,jdoe123" & return after file myFile
put "Jane Doe,jane@doe.com,jdoe123" & return after file myFile
put "Joe Bloggs,joe@bloggs.com,jblo123" & return after file myFile
put "Jane Bloggs,jane@bloggs.com,jblo123" & return after file myFile

.csvファイルからの読み取り

SenseTalkは、ファイルとのやり取りを簡単にし、カンマ区切りの値をインデックス付きコンテナにパースするための組み込みサポートも提供しています。

実際の値を使用することは、インデックスを直接使用するよりもユーザーフレンドリーであることがよくあります。以下の例では、目的のデータを含むセルを特定するために、列名と行名を指定する方法を示しています。

// CSVファイルの場所を定義します。上記のコードを使用してCSVファイルを生成しない場合、この手順が必要です。該当する場合は、コメントを外して、CSVファイルへの適切なパスを提供してください:
-- set myFile to "C:\ePF data\myDataFile.csv"
// どの列と行を操作したいかについて情報を渡します。これは、以下で行われているようにスクリプト内で設定することも、呼び出し元のスクリプトから渡すことも、データファイルから取得することもできます。
put "Email" into Column
put "Joe Bloggs" into Row
// CSVファイルのデータを反復処理するときに、探している列の位置を知る必要があります
put line 1 of file myFile into HeaderRow // 最初の行をコンテナに入れる
put the item number of Column in HeaderRow into ItemNumber
// ItemNumberに列のインデックスを計算して格納する (1から始まる)
log ItemNumber // これにより、ログにItemNumberが出力されます
// 上記のインデックスが設定されると、データファイルの行を反復処理できます
repeat with MyLine = each line of line 2 to the last of file myFile // ヘッダ行をスキップして、.csvファイルの各行で繰り返します。
if the first item of MyLine is Row
// 探している行が見つかったら...
then
Log "Found row containing '" & Row & "'"// この時点で、適切な行が選択されていることがわかります
Put item ItemNumber in MyLine into CellContents // 列インデックスを使用して、行の正しい値をCellContentsに格納する場所を特定できます
Log "Cell '" Column "," Row "' contains: " CellContents
// 必要に応じて、データが見つからなかった場合にログを記録することができます。デバッグに役立ちます
(*
else
log "Row did not contain " & Row
*)
end if
end repeat