Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / CSV files / 11 сообщений из 11, страница 1 из 1
02.10.2013, 16:35
    #38414602
Edgar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CSV files
Hi everybody.
Please give me sample VBA script for following:
1. Open CSV file
2. Copy data to Array1
3. Split comma-separated values and copy to Array2
4. Analyse each value
5. Remove some elements from Array1
5. Save the result Array1 into another CSV file

Thanks.
...
Рейтинг: 0 / 0
02.10.2013, 16:39
    #38414611
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CSV files
Модератор: Правила форума - Официальный язык форума - русский.
...
Рейтинг: 0 / 0
02.10.2013, 20:07
    #38414839
Edgar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CSV files
Привет всем.
Пожалуйста, дайте мне пример скрипта VBA для следующего:
1. Открыть CSV файл
2. Загнать данныe в Array1
3. Split значений, разделенных запятыми и загнать в Array2
4. Каждое значение анализируется
5. Удаляем некоторые элементы из Array1
5. Сохраняем результаты Array1 в другой файл CSV

Спасибо.
...
Рейтинг: 0 / 0
02.10.2013, 21:45
    #38414884
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CSV files
Можно понять цель данных манипуляций?
Я вот пока не вижу тут вообще необходимости в скрипте и массивах
...
Рейтинг: 0 / 0
03.10.2013, 12:21
    #38415322
Edgar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CSV files
Правка данных CSV файла
...
Рейтинг: 0 / 0
03.10.2013, 13:07
    #38415407
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CSV files
EdgarПравка данных CSV файлаВы ничего не путаете?
VBA(Excel) читает CSV-файлы сразу с разбивкой, зачем ещё раз разбивать строки?
3. Split(Array1)->Array2
4. Каждое значение анализируется
(какое значение и где расположенное??)
Да и далее Array2 нигде не используется.
Смысл наличия массивов? У вас более миллиона строк в источнике?
"Анализ значений", "удаление элементов" - это всё хорошо. А как вы смотрите на то,что ваша задача может быть вообще решена без использования импорта на лист и массивов? Подключаетесь к текстовому источнику данных, выполняете запрос с нужными вам условиями и обработкой, получаете результат, выгружаете рекордсет в текстовый файл...
...
Рейтинг: 0 / 0
03.10.2013, 15:18
    #38415640
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CSV files
EdgarПравка данных CSV файлаправка данных бывает разная, ее можно сделать даже в блокноте поиском-заменой или в Ворде в чуть более сложных случаях. Еще вариант описал Андре
...
Рейтинг: 0 / 0
03.10.2013, 23:10
    #38416208
Edgar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CSV files
Я, конечно же, понимаю, что все можно сделать в блокноте. Но мне нужна программная обработка. Если не лень, будьте добры,скиньтепару строчек кода....
Заранее благодарю.
Пресположим, исходный CSV файл содержит строчки:

Код: plaintext
1.
2.
3.
1,2,3,4,5,19/02/2011,АБВ
10,20,30,40,50,31/03/2012,АБВ
2,4,5,1,6,0,1,10/10/2013,АБВГ
-19,2,5,2,0,28/11/2013,АБВ

Надо из файла удалить все строчки содержащие в последнем поле значения АБВГ, или если значение даты в предпоследнем поле ранее 20/02/2011
т.е. после обработки VBA скриптом, в выходном файле должны оказаться строчки:

Код: plaintext
1.
10,20,30,40,50,31/03/2012,АБВ
-19,2,5,2,0,28/11/2013,АБВ
...
Рейтинг: 0 / 0
04.10.2013, 04:39
    #38416261
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CSV files
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Dim t As String, k As Variant, dt As Variant
Open "c:\1\1.csv" For Input As #1
Open "c:\1\2.csv" For Output As #2
Do Until EOF(1)
    Line Input #1, t
    k = Split(t, ",")
    dt = Split(k(UBound(k) - 1), "/")
    If k(UBound(k)) <> "АБВГ" And _
       DateSerial(dt(2), dt(1), dt(0)) >= #2/20/2011# Then Print #2, t
Loop
Close #1
Close #2
...
Рейтинг: 0 / 0
05.10.2013, 01:35
    #38417540
Edgar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CSV files
Большое спасибо, Shocker.Pro
По ходу пару вопросов:
1. В некоторых строчках дата отсустствует. Как сделать так, чтобы эти строчки также копировались в выходной файл?
2. Первая строчка файла содержит заголовки полей. Как сделать так, чтобы строка заголовков также оказалась в выходном файле?
Вот пример реальных данных:

Код: plaintext
1.
2.
3.
4.
5.
6.
Name,Range,Start,Until,Notes
A1,118515,10/12/2002,12/05/2008,1
A2,118518,22/09/2003,13/08/2013,6
A1,118520,25/05/2007,,1
A3,118522,13/10/2004,,1
A8,118525,23/09/2009,02/09/2013,1
A1,118528,16/01/2004,31/05/2011,1

На выходе должен получить

Код: plaintext
1.
2.
3.
4.
Name,Range,Start,Until,Notes
A2,118518,22/09/2003,13/08/2013,6
A1,118520,25/05/2007,,1
A3,118522,13/10/2004,,1
A8,118525,23/09/2009,02/09/2013,1

т.е. в результирующий файл попадают строчки у которых 4-е поле Until содержит позже 31/08/2011, а также строчки, у которых 4-е поле не содержит никакого значение - оно пусто.
...
Рейтинг: 0 / 0
05.10.2013, 02:46
    #38417549
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CSV files
EdgarПервая строчка файла содержит заголовки полей. Как сделать так, чтобы строка заголовков также оказалась в выходном файле?
стоило бы разобрать мой пример, а не просто им воспользоваться. Дописать две строки в программу не составило бы труда, по крайней мере по этому пункту

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Dim t As String, k As Variant, dt As Variant
Open "c:\1\1.csv" For Input As #1
Open "c:\1\2.csv" For Output As #2
Line Input #1, t
Print #2, t
Do Until EOF(1)
    Line Input #1, t
    k = Split(t, ",")
    If k(UBound(k) - 1) = "" Then
        Print #2, t
    Else
        dt = Split(k(UBound(k) - 1), "/")
        If k(UBound(k)) <> "АБВГ" And _
           DateSerial(dt(2), dt(1), dt(0)) >= #2/20/2011# Then Print #2, t
    End If
Loop
Close #1
Close #2


не проверял
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / CSV files / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]