Как переписать этот блок кода с помощью CFSCRIPT? - PullRequest
1 голос
/ 27 января 2012

Я использую ColdFusion 8.

Я пытаюсь написать этот блок кода в CFSCRIPT, но не могу его получить.

<cfloop query="Q">
    <cfscript>
        // CREATE NEW LINE
        NewLine = "";
    NewLine = NewLine & Q.product_url;
    </cfscript>
    <cffile action="append" file="#ThisFile#" output="#NewLine#">
</cfloop>

Вот CFSCRIPT

// LOOP THROUGH QUERY RESULTS
for (i = 1; i lte Q.RecordCount; i=i+1) {
    // CREATE NEW LINE
    NewLine = "";
    NewLine = NewLine & Q.product_url[i];
    // READ THE FILE
    File = fileOpen(ThisFile, "read");
    // WRITE NEW LINE TO FILE
    fileWriteLine(File, "#NewLine#");
    fileWrite(ThisFile, File);
    fileClose(File);
}

Я знаю, что должен открыть файл, изменить его, а затем закрыть файл.Я думаю, что мне нужно делать это с каждой новой добавленной строкой.

Что не так с этим кодом?

1 Ответ

8 голосов
/ 27 января 2012

Исправлено:

<cfscript>
    myFile = fileOpen(ThisFile, "append");

    for (i = 1; i lte Q.RecordCount; i=i+1) {
        NewLine = "";
        NewLine = NewLine & Q.product_url[i];

        fileWriteLine(myFile, "#NewLine#");
    }

    fileClose(myFile);
</cfscript>

Устранены проблемы:

  1. Вы не открываете и не закрываете файл в каждой строке;Вы а) открываете файл, б) пишете 1-х строк, затем в) закрываете файл (поочередно, вы можете написать все сразу с помощью fileWrite())

  2. Вы нене нужны и fileWriteLine, и fileWrite, fileWriteLine для построчной записи, а fileWrite для записи и всего набора данных за один снимок.

Я также изменил «запись»«добавить», если файл, в который вы пишете, не существует при первом выполнении - очевидно, если вы можете гарантировать, что файл назначения существует, вы можете заменить «добавить» на «запись».Имейте в виду, что изменение этого параметра также приведет к увеличению вашего файла с течением времени;это может быть не то, что вы хотите, поэтому переключите его обратно на «запись», если это так.

Хотя я не могу быть уверен, не увидев вашей точной ошибки, у меня есть догадка, что это было FileWrite()линия, которая была виновником.

...