Прочесть текстовый файл, пропустив n ненужных столбцов
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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | * Чтение текстовых файлов, в которых надо пропустить n столбцов. * (число n может меняться от файла к файлу). *(Вопрос) >Я составляю программу импорта данных в SPSS, которая будет исполняться >на разных файлах данных. Они практически идентичны за тем исключением, >что число столбцов, которые требуется пропустить (не импортировать), различно в разных файлах. >В остальном файлы идентичны.. > >Я бы хотел составить программу, где пользователю надо было бы указать в начале >число столбцов, которые следует пропустить (т.е. начальную позицию) чтения, а остальное >бы чтобы сделала программа. Тут я вижу две проблемы: >a) не ясно, как указать начальную позицию чтения и b) не ясно, как сделать так, чтобы >программа сама адаптировалась к начальной позиции и вычислила номер последнего столбца, который следует >прочитать. Если бы вы сделали так, чтобы пример программы, которая приведена ниже, заработал, >думаю, дальше я бы сам справился. > >В примере программы ниже я пытаюсь передать значение 6 из макроса (DEFINE) в команду DATA LIST. >Затем, уже в DATA LIST, пытаюсь скорректировать это значение ,чтобы получить координаты последнего >столбца для чтения. Разумеется, этот вариант не работает. Я открыт для всех предложений. > > >*********** Со стыдом привожу сей неработающий вариант... >new file. >define !start ()'6'!enddefine. >DATA LIST /Age 1-2 SEX 4 (A) bday !start - (!start + 5). >BEGIN DATA >28 M 25000 >26 F 28500 >25 M 30000 >END DATA. >LIST. *(Ответ) Размещено в новостной группе SPSS 5.2.2002. Автор: Raynald Levesque. * http://www.spsstools.net. * Следующий синтаксис решает вашу задачу:. new file. set mprint=no. define !dlist(col=!TOKENS(1)) !LET !endcol=!LENGTH(!CONCAT(!BLANK(!col),!BLANK(5))) DATA LIST /Age 1-2 SEX 4 (A) bday !col - !endcol. !enddefine. set mprint=yes. !dlist col=6. BEGIN DATA 28 M 25000 26 F 28500 25 M 30000 END DATA. LIST. ***********. * ОДНАКО этот вариант будет довольно неудобен, если после переменной bday у вас в файле есть ещё много переменных. * Думаю, следующее решение будет ПРОЩЕ: DATA LIST FIXED /col1 TO col20 1-20 (A). BEGIN DATA 28 M xxx25000 26 F xxx28500 25 M xxx30000 END DATA. LIST. * Число 9 в следующей строке вы меняете в зависимости от вашего файла. WRITE OUTFILE='c:\\temp\\data.txt' /col1 TO col5 col9 TO col20. EXECUTE. * А следующая строка уже не зависит от конкретного файла. DATA LIST FILE='c:\\temp\\data.txt' FIXED /Age 1-2 SEX 4 (A) bday 6 - 11. LIST. |