Как использовать listAppend () с пустым значением массива? (Холодный синтез) - PullRequest
1 голос
/ 04 мая 2020

Я пытаюсь прочитать один столбец файла CSV и добавить все данные в нем в список. После загрузки файла CSV я использую функцию CSVToArray, чтобы превратить файл CSV в 2D-массив. Затем я создаю пустой список и l oop через файл CSV, добавляя данные из определенного столбца в каждой строке в мой список.

<cfset myList = "">

<cfloop index="i" from=2 to=#ArrayLen(csvArray)#>
    <cfoutput>#csvArray[2][7]#</cfoutput>
    <cfset myList = listAppend(myList, csvArray[2][7], true)>
</cfloop> 

Приведенный выше код дает мне следующую ошибку в строке с функцией listAppend, но не в предыдущей строке, которая использует cfoutput для отображения того же значения. The element at position 7, of dimension 2, of an array object used as part of an expression, cannot be found.

Могу ли я использовать listAppend, даже если значение, которое я пытаюсь добавить, является пустым / пустым?

РЕДАКТИРОВАТЬ: Я, скорее всего, просто проверю, если значение массива существует до добавления его с помощью функции ArrayIsDefined (). Новый код:

<cfset myList = "">

<cfloop index="i" from=2 to=#ArrayLen(csvArray)#>
    <cfif arrayIsDefined(csvArray[i][7])>
        <cfset myList = listAppend(myList, csvArray[i][7])>
    </cfif>
</cfloop> 

Мне все еще любопытно, почему я получаю ошибку от listAppend (), но не от cfoutput. Может кто-нибудь сказать мне, почему это происходит?

РЕДАКТИРОВАТЬ 2: Вот cfdump из csvArray [2]:

: array
1   12345
2   John
3   [empty string]
4   Smith
5   [empty string]
6   02/04/2020
7   [empty string]
8   [empty string]
9   [empty string]
10  [empty string]
11  [empty string]
12  [empty string]
13  [empty string]
14  [empty string]
15  123456789
16  [empty string]

РЕДАКТИРОВАТЬ 3: Я попытался снова с помощью следующего кода, чтобы вывести значение читается из файла CSV вместе со значением для i, итератор в моем l oop.

<cfloop index="i" from=2 to=#ArrayLen(csvArray)#>
    <cfoutput>#csvArray[i][7]#</cfoutput>__<Cfoutput>#i#</Cfoutput><br>
</cfloop>

Вывод:

__2
__3
__4
__5
__6

Error Occurred While Processing Request
The element at position 7, of dimension 2, of an array object used as part of an expression, cannot be found.

Сбой при попытке вывести csvArray [7] [7], что имеет смысл, поскольку файл CSV имеет всего 6 строк. Странно, что он говорит мне, что он не работает на csvArray [2] [7], если только я неправильно понимаю сообщение об ошибке.

1 Ответ

1 голос
/ 04 мая 2020

Другой подход заключается в чтении файла csv с тегом cfhttp с использованием атрибута name. Это создает объект запроса. Отсюда вы можете рассматривать каждый столбец как одномерный массив и использовать функцию ArrayToList () для создания списка.

Вот простой пример.

<cfhttp url = "path to your csv file" 
name = "QueryObject" 
firstrowasheaders = "yes">

<cfset myList = ArrayToList(QueryObject["name of 7th column"])>

Правка начинается здесь

Еще проще, используйте функцию ValueList().

...