powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / CSV files
11 сообщений из 11, страница 1 из 1
CSV files
    #38414602
Edgar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
CSV files
    #38414611
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модератор: Правила форума - Официальный язык форума - русский.
...
Рейтинг: 0 / 0
CSV files
    #38414839
Edgar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем.
Пожалуйста, дайте мне пример скрипта VBA для следующего:
1. Открыть CSV файл
2. Загнать данныe в Array1
3. Split значений, разделенных запятыми и загнать в Array2
4. Каждое значение анализируется
5. Удаляем некоторые элементы из Array1
5. Сохраняем результаты Array1 в другой файл CSV

Спасибо.
...
Рейтинг: 0 / 0
CSV files
    #38414884
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно понять цель данных манипуляций?
Я вот пока не вижу тут вообще необходимости в скрипте и массивах
...
Рейтинг: 0 / 0
CSV files
    #38415322
Edgar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правка данных CSV файла
...
Рейтинг: 0 / 0
CSV files
    #38415407
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EdgarПравка данных CSV файлаВы ничего не путаете?
VBA(Excel) читает CSV-файлы сразу с разбивкой, зачем ещё раз разбивать строки?
3. Split(Array1)->Array2
4. Каждое значение анализируется
(какое значение и где расположенное??)
Да и далее Array2 нигде не используется.
Смысл наличия массивов? У вас более миллиона строк в источнике?
"Анализ значений", "удаление элементов" - это всё хорошо. А как вы смотрите на то,что ваша задача может быть вообще решена без использования импорта на лист и массивов? Подключаетесь к текстовому источнику данных, выполняете запрос с нужными вам условиями и обработкой, получаете результат, выгружаете рекордсет в текстовый файл...
...
Рейтинг: 0 / 0
CSV files
    #38415640
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EdgarПравка данных CSV файлаправка данных бывает разная, ее можно сделать даже в блокноте поиском-заменой или в Ворде в чуть более сложных случаях. Еще вариант описал Андре
...
Рейтинг: 0 / 0
CSV files
    #38416208
Edgar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я, конечно же, понимаю, что все можно сделать в блокноте. Но мне нужна программная обработка. Если не лень, будьте добры,скиньтепару строчек кода....
Заранее благодарю.
Пресположим, исходный 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
CSV files
    #38416261
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
CSV files
    #38417540
Edgar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большое спасибо, 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
CSV files
    #38417549
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
11 сообщений из 11, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / CSV files
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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