1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
* Импорт файла, разделённого запятыми, с запятыми внутри строковых значений.

* (Вопрос) Как можно импортировать в SPSS текстовый файл с запятыми в качестве разделителей,
* если запятые встречаются внутри закавыченных текстовых значений?.

* (Ответ) Автор: rlevesque@videotron.ca, размещён в SPSSX-L 03.11.2001.

* Примеч.: в случае, если длина строки слишком велика, используйте команду FILE HANDLE.

* Во-первых, прочтём данные построчно целиком в одну текстовую переменную.
DATA LIST FIXED /str1 1-80 (A).
BEGIN DATA
1,"6159905","XYZ Agency, City Middle School",0,,,0,1
2,"4444","ABC Company,, My City,",1,2,3,4,5
END DATA.
LIST.

* Заменим запятые, разделяющие поля (переменные) на "~" (или какой-либо другой символ, ещё отсутствующий в исходных данных).
* Запятые внутри закавыченных значений оставляем нетронутыми.
COMPUTE #inside=-1.
LOOP cnt=1 TO 80.
IF SUBSTR(str1,cnt,1)="," & #inside=-1 SUBSTR(str1,cnt,1)="~".
IF SUBSTR(str1, cnt,1)='"' #inside=#inside*-1.
END LOOP.

* Запишем результат в новый текстовый файл, где поля разделяются символами "~".
WRITE OUTFILE='c:\\temp\\data.txt' /str1.
EXECUTE.

* А теперь прочтём из этого файла данные, указав корректный разделитель.
NEW FILE.
DATA LIST FILE='c:\\temp\\data.txt' LIST('~') 
	/ id(f8.2) nb(A10) addr(A50) var1(f8.2) var2(f8.2) var3(f8.2) var4(f8.2) var5(f8.2). 
LIST.