Список, перенос из csv с нюансом

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
123
Благодарностей
22
Баллы
18
Доброго времени суток
Помогите пжл решить задачу
Есть csv файл с разделителем ячеек в строчке ","
Но также в ячейке между "," есть другие запятые но при этом идет "экранирование запятой" (не уверен что правильно написать про экранирование)
Но экранирование заключается в "text, text"

Как правильно разделить по строкам, но что бы в строку попало и значение text, text с запятой но уже без кавычек (можно и с ними) ?

Пример исходного текста:
name,street,"US, UK, AU",state,"15,d7,pr",zip
Выход:
name
street
"US, UK, AU"
state
"15,d7,pr"
zip
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 523
Благодарностей
1 321
Баллы
113
Доброго времени суток
Помогите пжл решить задачу
Есть csv файл с разделителем ячеек в строчке ","
Но также в ячейке между "," есть другие запятые но при этом идет "экранирование запятой" (не уверен что правильно написать про экранирование)
Но экранирование заключается в "text, text"

Как правильно разделить по строкам, но что бы в строку попало и значение text, text с запятой но уже без кавычек (можно и с ними) ?

Пример исходного текста:


Выход:
Регуляркой - замена запятой, у которой нету (!?\") по бокам кавычек, на другой разделитель, а потом в настройке таблице зенки, указываете новый разделитель. А при добавлении в таблицу, заменяем кавычки на пустоту. А что бы сразу пачкой вставить, думаю не выйдет.
 
  • Спасибо
Реакции: ErikMoor

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
123
Благодарностей
22
Баллы
18
Спасибо за ответ
Но не совсем понял как это сделать "Регуляркой - замена запятой, у которой нету (!?\") по бокам кавычек"
Замена регуляркой на что то - ок, но у которой нет чего то ? Как сделать ?

Исходное значение : name,street,"US, UK, AU",state,"15,d7,pr",zip

Надо что бы было так, ну или можно без кавычек
name
street
"US, UK, AU"
state
"15,d7,pr"
zip
Но вот получается вот так
name
street
"US
UK
AU"
state
"15
d7
pr"
zip
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 523
Благодарностей
1 321
Баллы
113
Спасибо за ответ
Но не совсем понял как это сделать "Регуляркой - замена запятой, у которой нету (!?\") по бокам кавычек"
Замена регуляркой на что то - ок, но у которой нет чего то ? Как сделать ?

Исходное значение : name,street,"US, UK, AU",state,"15,d7,pr",zip

Надо что бы было так, ну или можно без кавычек


Но вот получается вот так
(?<=\,|^)[0-9a-zA-Z-а-яА-Я-\s]+(?=\,|$)|(?<=\,|^)(\").*?(\")(?=\,|$)
94211
94212
 

Вложения

Последнее редактирование:
  • Спасибо
Реакции: ErikMoor

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
123
Благодарностей
22
Баллы
18
Спасибо бро
Это то что нужно
 

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
123
Благодарностей
22
Баллы
18
Все работает отлично, но пропускает некоторые значения если они попадаются, а именно вот какие
Исходный файл:
100000019,100000019,Current,Current,Current,Resident,Resident,Resident,10166 Phillips Dr,10166 Phillips Dr,Olive Branch,Olive Branch,Olive Branch,['Olive Branch'],MS,MS,38774,5108,C004,56,1,Actual,34.3515791,-89.8600713,6,28033,Desoto,32820,"Memphis, TN-MS-AR",0,U,0,und,0,I,"$200,000 to $224,999",A,"$200,000 to $224,999",
Регулярное выражение:
(?<=\,|^)[0-9a-z-A-Z-]+(?=\,|$)|(?<=\,|^)(\").*?(\")(?=\,|$)

Как подправить регулярку выше что бы видело строки с символами ]['. и пробел

94216


 
Последнее редактирование:

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 523
Благодарностей
1 321
Баллы
113
Все работает отлично, но пропускает некоторые значения если они попадаются, а именно вот какие
Исходный файл:


Регулярное выражение:
(?<=\,|^)[0-9a-z-A-Z-]+(?=\,|$)|(?<=\,|^)(\").*?(\")(?=\,|$)

Как подправить регулярку выше что бы видело строки с символами ]['. и пробел

Посмотреть вложение 94216
1. Если пишете мне например, тогда нужно нажимать кнопку
94217
в моем сообщении, так как я не увижу оповещения, если не отметите!
2. Что бы вам помочь, нужен пример (1) как есть текст и (2) как нужно сделать текст.
 

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
123
Благодарностей
22
Баллы
18
1. Если пишете мне например, тогда нужно нажимать кнопку Посмотреть вложение 94217 в моем сообщении, так как я не увижу оповещения, если не отметите!
2. Что бы вам помочь, нужен пример (1) как есть текст и (2) как нужно сделать текст.

Исходные данные:
100000019,100000019,Current,Current,Current,Resident,Resident,Resident,10166 Phillips Dr,10166 Phillips Dr,Olive Branch,Olive Branch,Olive Branch,['Olive Branch'],MS,MS,38774,5108,C004,56,1,Actual,34.3515791,-89.8600713,6,28033,Desoto,32820,"Memphis, TN-MS-AR",0,U,0,und,0,I,"$200,000 to $224,999",A,"$200,000 to $224,999",
Выход:
100000019
100000019
Current
Current
Current
Resident
Resident
Resident
10166 Phillips Dr
10166 Phillips Dr
Olive Branch
Olive Branch
Olive Branch
['Olive Branch']
MS
MS
38774
5108
C004
56
1
Actual
34.3515791
-89.8600713
6
28033
Desoto
32820
"Memphis, TN-MS-AR"
0
U
0
und
0
I
"$200,000 to $224,999"
A
"$200,000 to $224,999"
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 523
Благодарностей
1 321
Баллы
113
  • Спасибо
Реакции: ErikMoor

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
123
Благодарностей
22
Баллы
18

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
123
Благодарностей
22
Баллы
18

ErikMoor

Client
Регистрация
24.03.2016
Сообщения
123
Благодарностей
22
Баллы
18
(?<=\,|^)[0-9a-zA-Z-а-яА-Я-\s]+(?=\,|$)|(?<=\,|^)(\"|\[).*?(\"|\])(?=\,|$)
Все ни как не могу доделать эту регулярку )))
На данный момент есть рабочий вариант который подходит
C#:
(?<=\,|^)[0-9a-zA-Z-а-яА-Я-\s\.]+(?=\,|$)|(?<=\,|^)(\"|\[).*?(\"|\])(?=\,|$)
Но если в ячейке ничего не записано, надо что бы с список добавляло пустую строчку, он ничего не записует

Исходный:
1,0,"44.560516,-122.9806242","44.560516,-122.9806242","['1', '2', '0', '0']",2,0,0,973229768,97322976892,1,0,0,1693343434613456899,44.560516,-122.9806242,Dr,4,3,,,,R,1980,11,40,1802
На выходе должно получиться:
1
0
"44.560516,-122.9806242"
"44.560516,-122.9806242"
"['1', '2', '0', '0']"
2
0
0
973229768
97322976892
1
0
0
1693343434613456899
44.560516
-122.9806242
Dr
4
3



R
1980
11
40
1802
94223
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 523
Благодарностей
1 321
Баллы
113
Все ни как не могу доделать эту регулярку )))
На данный момент есть рабочий вариант который подходит
C#:
(?<=\,|^)[0-9a-zA-Z-а-яА-Я-\s\.]+(?=\,|$)|(?<=\,|^)(\"|\[).*?(\"|\])(?=\,|$)
Но если в ячейке ничего не записано, надо что бы с список добавляло пустую строчку, он ничего не записует

Исходный:


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


Посмотреть вложение 94223
Тут уже регуляркой не обойтись. Делайте в таком случае перед регуляркой - кубиком замена с ,,на , ,, что бы запятые разделить пробелом.
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 788
Благодарностей
2 453
Баллы
113
Не знаю, чем не угодили стандартные таблички Зеннопостера, что приходится руками это все разбирать...
Но, если уж такая хотелка есть - то её можно решить примерно так - подключаем стандартную библиотеку, которая умеет это делать.
После чего уже берем данные, и складываем их куда-то например в таблицу Зеннопостера.
Ниже есть пример как это делается.

Если же нужно только 1 строку разобрать на поля - также не проблема - подаем только одну строку в переменную csv, и на выходе получаем все поля в столбик (второй пример с этого сообщения.

Ниже всё проиллюстрировал скриншотами, вдруг что-то не понятно будет...
94224

94225


C#:
var tb = project.Tables["tb"];
string csv = project.Variables["csv"].Value;

Stream responseStream = new System.IO.MemoryStream(Encoding.UTF8.GetBytes(csv));
var parser = new Microsoft.VisualBasic.FileIO.TextFieldParser(responseStream);
    parser.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited;
    parser.SetDelimiters(",");
    while (!parser.EndOfData) tb.AddRow(parser.ReadFields());
 
parser.Dispose();
    responseStream.Close();
94226



Вариант с выводом одной строки:
string csv = project.Variables["csv"].Value;
string line = string.Empty;

Stream responseStream = new System.IO.MemoryStream(Encoding.UTF8.GetBytes(csv));
var parser = new Microsoft.VisualBasic.FileIO.TextFieldParser(responseStream);
    parser.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited;
    parser.SetDelimiters(",");
    while (!parser.EndOfData) {
        line = string.Join(Environment.NewLine, parser.ReadFields());
        // если нужна только первая строка
        break;
    }
  
parser.Dispose();
responseStream.Close();
    return line;
94227


Добавил ещё пример шаблона по последнему примеру.
 

Вложения

Последнее редактирование:
  • Спасибо
Реакции: ErikMoor

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)