12

MySQL データベースから、既存のデータを で実行できる ruby​​ コマンドにエクスポートしようとしていますrake db:seed

これが私のコードです。

# Generate db:seed data for proveedores.
$proveedores = R::findAll('tbproveedores');
$proveedoresE = R::exportAll($proveedores);

foreach ($proveedoresE as &$p) {

    $line = 'BookSupplier.create(company: "%s", city: "%s", country: "%s", address: "%s", telephone: "%s", contact: "%s", email: "%s", website: "%s"\n';
    $exportedLine = sprintf($line, $p['empresa'], $p['ciudad'], $p['pais'], $p['direccion'], $p['telefono'], $p['personacontacto'], $p['email'], $p['website']);
    var_dump($exportedLine);
    fwrite($seeds, $exportedLine);
    echo "<br />";
}

\n$line 変数の末尾にある改行記号に注意してください。改行を使用するために必要なのはそれだけだとオンラインで読みました。

上記のコードの出力は ( vertabim, a long line ):

BookSupplier.create(company: "Pearson", city: "Lima", country: "Peru", address: "Av. Limon", telephone: "4673535421", contact: "Javier", email: "", website: ""\nBookSupplier.create(company: "Project Management Institute - PMI", city: "Pennsylvania", country: "Estados Unidos", address: "Newtown Square, Pennsylvania", telephone: "1", contact: "Limberg Morales", email: "", website: "http://www.pmi.org/"\nBookSupplier.create(company: "UVirtual - Centro de Excelencia", city: "Santa Cruz", country: "Bolivia", address: "Av. Irala 585", telephone: "1", contact: "Limberg Morales", email: "", website: ""\nBookSupplier.create(company: "Ábaco de Rodolfo Depalma", city: "Buenos Aires", country: "Argentina", address: "Viamonte 1336, 4° (C1053 ACB) Buenos Aires", telephone: "5411-43711675", contact: "Limberg Morales", email: "", website: "http://www.abacoeditorial.com.ar/"\nBookSupplier.create(company: "Pablo Lledó - ProjectManagement", city: "Canadá", country: "Estados Unidos", address: "Victoria, BC, Canadá", telephone: "1", contact: "Limberg Morales", email: "", website: ""\n

改行の挿入に続いて、各呼び出しを独自の行に配置したいと思います。私が間違っていることについて何か提案はありますか?

4

6 に答える 6

33

改行記号は、二重\n引用符で囲まれている場合にのみ解釈されます: . そのように:"

$line  = '...............';
$line .= "\n";

PHP_EOLまた、いくつかのオペレーティングシステムで異なるシステムの改行区切り文字を含む定数であることについても知っておく必要があります。たとえば\n、Linux ではなく\r\nWindows です。最も移植性の高いコードは次のようになります。

$line  = '.....';
$line .= PHP_EOL;
于 2013-02-26T14:41:14.440 に答える
5

二重引用符で囲まれた文字列を使用する必要があります。一重引用符で囲まれたものは特殊文字シーケンスを展開しません。PHP 文字列の詳細については、マニュアルを参照してください。

于 2013-02-26T14:42:45.367 に答える
2

ジョシュの答えに続いて、 %s を使用して、補間された文字列から改行を printf に挿入できます。printf('something%s', "\n")これは、より複雑な例でより意味があり始めます-たとえば、文字列テンプレートが言語変数に格納されている場合、または複数の置換を行っている場合、またはPHBが義務付けているため、sprintfに固執する必要があります。

あなたの場合、それは

$line = 'BookSupplier.create(company: "%s", city: "%s", country: "%s", address: "%s", telephone: "%s", contact: "%s", email: "%s", website: "%s"%s';
$exportedLine = sprintf($line, $p['empresa'], $p['ciudad'], $p['pais'], $p['direccion'], $p['telefono'], $p['personacontacto'], $p['email'], $p['website'], "\n");

私は電子メールヘッダーブロックを次のようにフォーマットしました:

$headers = sprintf(
    'From: %1$s%2$sReply-To: %1$s%2$sMIME-Version: 1.0%2$sContent-type: text/html; charset=iso-8859-1%2$s'
    , $EMAIL_FROM, "\r\n");

パラメータ インデックス構文\r\nを使用しての使用を繰り返します。1$

その%2$sため、新しい\r\nになり、余分な文字を使用することはありませんが、読みにくくなります!

于 2015-03-24T11:08:05.990 に答える
2

文字列内の特殊文字は、二重引用符 (") で囲まれている場合にのみ機能します。詳細については、PHP 文字列のドキュメントを参照してください。

したがって、二重引用符を使用します。これは、文字列でもかなりの数の二重引用符を使用するため、大変な作業です。文字列内のすべての二重引用符をエスケープします。

または、怠惰な場合は、後で新しい行を連結します。

$line = '...';
$line .= "\n";
于 2013-02-26T14:41:42.230 に答える
0
$line = "BookSupplier.create(company: '%s', city: '%s', country: '%s', address: '%s', telephone: '%s', contact: '%s', email: '%s', website: '%s'\n";

\n (または \t のようなその他の空白文字) が機能するには、二重引用符が必須です。

于 2013-02-26T14:41:24.973 に答える