Привязка списка к файлу

indigo666

Client
Регистрация
10.05.2014
Сообщения
1 098
Благодарностей
344
Баллы
83
Здравствуйте.

Понадобилось при привязке списка к файлу также поменять разделитель.

Можно ли нечто подобное добавить в последующих билдах?

И как можно это сделать например Си шарпом? Как временное решение скажем?
 

Nord

Client
Регистрация
22.03.2012
Сообщения
2 373
Благодарностей
1 433
Баллы
113
При сохранении можно указывать свой разделитель, либо если нужно поменять на другой - то замена
 
  • Спасибо
Реакции: indigo666

indigo666

Client
Регистрация
10.05.2014
Сообщения
1 098
Благодарностей
344
Баллы
83
При сохранении можно указывать свой разделитель, либо если нужно поменять на другой - то замена
Извините, но видимо Вы меня не поняли. Имелось ввиду привязка файла ко списку экшеном а не в настройках списка.
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 100
Баллы
113
Имелось ввиду привязка файла ко списку экшеном а не в настройках списка.
А разве не сработает, если в настройках списка поставить галочку "Загружать из файла", прописать нужный разделитель и привязывать кубиком?
 
  • Спасибо
Реакции: indigo666

indigo666

Client
Регистрация
10.05.2014
Сообщения
1 098
Благодарностей
344
Баллы
83
А разве не сработает, если в настройках списка поставить галочку "Загружать из файла", прописать нужный разделитель и привязывать кубиком?
В том-то и дело, что разделители будут меняться в течении одного проекта и нужно, чтобы было возможно изменить разделитесь автоматически а не каждый раз менять вручную.
 

justhelen

Client
Регистрация
18.11.2009
Сообщения
267
Благодарностей
134
Баллы
43
В том-то и дело, что разделители будут меняться в течении одного проекта и нужно, чтобы было возможно изменить разделитесь автоматически а не каждый раз менять вручную.
Что конкретно нужно сделать? Есть какие-то строки, у которых один разделитель, а потом другие строки с другим разделителем и их нужно записать в список? Или что-то другое?
 
  • Спасибо
Реакции: indigo666

indigo666

Client
Регистрация
10.05.2014
Сообщения
1 098
Благодарностей
344
Баллы
83
Что конкретно нужно сделать? Есть какие-то строки, у которых один разделитель, а потом другие строки с другим разделителем и их нужно записать в список? Или что-то другое?
Нужно, чтобы можно было бы указать при прикреплении файла ко списку одновременно указать и уникальный разделитель для конкретного файла, чтобы сразу список принял тот вид, который нужен.

Взял рандом файл -» Прикрепил ко списку -» Указал разделитель списка для файла = Список принял тот вид который нужен, то есть правильно понял какие данные нужно считать за единицу ячейки списка
 

justhelen

Client
Регистрация
18.11.2009
Сообщения
267
Благодарностей
134
Баллы
43
Нужно, чтобы можно было бы указать при прикреплении файла ко списку одновременно указать и уникальный разделитель для конкретного файла, чтобы сразу список принял тот вид, который нужен.

Взял рандом файл -» Прикрепил ко списку -» Указал разделитель списка для файла = Список принял тот вид который нужен, то есть правильно понял какие данные нужно считать за единицу ячейки списка
Тебе хотелось бы, чтобы можно было к списку прикрепить несколько разных файлов с разными разделителями, но такого функционала нет. Поэтому можно это сделать на C#.

Код:
String s = System.IO.File.ReadAllText("путь к файлу");

for (int i = 0; i < s.Split(new char[] {'разделитель'}).Length; i++)
    project.Lists["list"].Add(s.Split(new char[] {'разделитель'})[i]);
И так для каждого файла с разными разделителями (разделитель здесь предполагается, что будет 1 символ).

Если в одном файле есть строки с разными разделителями, то их можно перечислить через запятую вот так:

Код:
String s = System.IO.File.ReadAllText("путь к файлу");

for (int i = 0; i < s.Split(new char[] {'разделитель', 'разделитель1', 'разделитель2'}).Length; i++)
    project.Lists["list"].Add(s.Split(new char[] {'разделитель', 'разделитель1', 'разделитель2'})[i]);
Вообще там должна быть функция AddRange чтоб без цикла добавлять в список, но она почему-то именно для списков из меню "Списки" не работает (а если создать список в кубике C#, то работает).

В строке project.Lists["list"] надо поменять list на название твоего списка.
 
  • Спасибо
Реакции: indigo666

justhelen

Client
Регистрация
18.11.2009
Сообщения
267
Благодарностей
134
Баллы
43
Ещё можно все файлы слепить вот так:
Код:
String s = System.IO.File.ReadAllText("путь к файлу") + System.IO.File.ReadAllText("путь к файлу1");
Т.е. в принципе ты даже можешь слепить все файлы, указать через запятую все разделители. Но это если у тебя так каша не получится, в смысле, если нет такого, что например символ ':' в одном файле является разделителем, а в другом файле такой символ тоже есть, но он не разделитель.

Если разделитель - это не 1 символ, а несколько, то тогда надо так:

Код:
s.Split(new string[] {"разделитель"}, StringSplitOptions.None);
(я думаю, понятно, где поменять в коде)

Ещё тебе надо почитать темы про lock, многопоточность. Я не знаю, многопоточный ли шаблон и в каком месте будут делаться все эти действия. Возможно, это нужно будет локнуть. Почитай те темы, лень объяснять :-)
 
  • Спасибо
Реакции: indigo666

indigo666

Client
Регистрация
10.05.2014
Сообщения
1 098
Благодарностей
344
Баллы
83

justhelen

Client
Регистрация
18.11.2009
Сообщения
267
Благодарностей
134
Баллы
43
То, что нужно было, спасибо!
А мне кажется, ты не так понял :-)

Несколько символов в другом смысле.

Например, есть строка "111|222|333". Разделитель '|' - один символ. Есть другая строка "111№%:222№%:333". Разделитель "№%:" - много символов. Я это имела в виду. Если у тебя так, что есть строки с разными разделителями, то их нельзя все написать в s.Split(new string[] {"разделитель"}, StringSplitOptions.None);. Т.е. как, можно, но вот так тогда s.Split(new string[] {"разделитель", "разделитель1", "разделитель2"}, StringSplitOptions.None); Но если ты так сделаешь, тебе надо подумать, не является ли тот символ (или символы), которые используются как разделитель для строк из одного файла, обычной частью строк из другого файла (не разделителем). Надеюсь, понятно написала.
 
  • Спасибо
Реакции: indigo666

indigo666

Client
Регистрация
10.05.2014
Сообщения
1 098
Благодарностей
344
Баллы
83
А мне кажется, ты не так понял :-)

Несколько символов в другом смысле.

Например, есть строка "111|222|333". Разделитель '|' - один символ. Есть другая строка "111№%:222№%:333". Разделитель "№%:" - много символов. Я это имела в виду. Если у тебя так, что есть строки с разными разделителями, то их нельзя все написать в s.Split(new string[] {"разделитель"}, StringSplitOptions.None);. Т.е. как, можно, но вот так тогда s.Split(new string[] {"разделитель", "разделитель1", "разделитель2"}, StringSplitOptions.None); Но если ты так сделаешь, тебе надо подумать, не является ли тот символ (или символы), которые используются как разделитель для строк из одного файла, обычной частью строк из другого файла (не разделителем). Надеюсь, понятно написала.
Все правильно ) Именно сложные разделители мне нужны. Не то, чтоб в одном файле много, а просто у разных файлов разделители разные и они сложные сочетания. Например такие +++ или такие $ $ $ *** $$$ ну и т.д.
 

indigo666

Client
Регистрация
10.05.2014
Сообщения
1 098
Благодарностей
344
Баллы
83
А мне кажется, ты не так понял :-)

Несколько символов в другом смысле.

Например, есть строка "111|222|333". Разделитель '|' - один символ. Есть другая строка "111№%:222№%:333". Разделитель "№%:" - много символов. Я это имела в виду. Если у тебя так, что есть строки с разными разделителями, то их нельзя все написать в s.Split(new string[] {"разделитель"}, StringSplitOptions.None);. Т.е. как, можно, но вот так тогда s.Split(new string[] {"разделитель", "разделитель1", "разделитель2"}, StringSplitOptions.None); Но если ты так сделаешь, тебе надо подумать, не является ли тот символ (или символы), которые используются как разделитель для строк из одного файла, обычной частью строк из другого файла (не разделителем). Надеюсь, понятно написала.
Такс.. Ща хотел поставить и встал перед проблемой.

Мне нужно, чтобы разделитель можно было бы указать во входных данных ) Не подскажешь как это сделать?
 

justhelen

Client
Регистрация
18.11.2009
Сообщения
267
Благодарностей
134
Баллы
43
  • Спасибо
Реакции: indigo666

indigo666

Client
Регистрация
10.05.2014
Сообщения
1 098
Благодарностей
344
Баллы
83
Это я знаю, только с кодом не работает)
 

justhelen

Client
Регистрация
18.11.2009
Сообщения
267
Благодарностей
134
Баллы
43
Это я знаю, только с кодом не работает)
Ох, блин :-) Например, ты записал разделитель в переменную divider.

Код:
String s = System.IO.File.ReadAllText("путь к файлу");

String divider = project.Variables["divider"].Value;

for (int i = 0; i < s.Split(new string[] {divider}, StringSplitOptions.None).Length; i++)
    project.Lists["list"].Add(s.Split(new string[] {divider}, StringSplitOptions.None)[i]);
Это я написала для варианта, когда у тебя разделитель - сложное сочетание (как ты и говорил).
 
  • Спасибо
Реакции: indigo666

indigo666

Client
Регистрация
10.05.2014
Сообщения
1 098
Благодарностей
344
Баллы
83
Ох, блин :-) Например, ты записал разделитель в переменную divider.

Код:
String s = System.IO.File.ReadAllText("путь к файлу");

String divider = project.Variables["divider"].Value;

for (int i = 0; i < s.Split(new string[] {divider}, StringSplitOptions.None).Length; i++)
    project.Lists["list"].Add(s.Split(new string[] {divider}, StringSplitOptions.None)[i]);
Это я написала для варианта, когда у тебя разделитель - сложное сочетание (как ты и говорил).
Спасибо :-) Как благодарность сейчас отправлю в личку ту инфу, что ты просила :-)
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 100
Баллы
113
C#:
IZennoList list = project.Lists["List"]; // список проекта
string path = project.Variables["path"].Value; // путь к файлу
string separator = project.Variables["separator"].Value; // разделитель

string str = File.ReadAllText(path);
string[] split = str.Split(new[] {separator}, StringSplitOptions.None);

foreach (string s in split)
    list.Add(s);
 
  • Спасибо
Реакции: impul5e и indigo666

indigo666

Client
Регистрация
10.05.2014
Сообщения
1 098
Благодарностей
344
Баллы
83
По обоим кодам ошибку выдает. Не понимаю что именно не так делаю. Вместо List ставлю название списка

Вместо path ставлю переменную адреса файла

Вместо separator ставлю переменную разделителя

И получаю ошибку (
 

indigo666

Client
Регистрация
10.05.2014
Сообщения
1 098
Благодарностей
344
Баллы
83
IZennoList list = project.Lists["answers"]; // список проекта
string path = project.Variables["{-Variable.answer-}"].Value; // путь к файлу
string separator = project.Variables["{-Variable.divider-}"].Value; // разделитель

string str = File.ReadAllText(path);
string[] split = str.Split(new[] {separator}, StringSplitOptions.None);
foreach (string s in split)
list.Add(s);

 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 100
Баллы
113
Не надо ничего вставлять "вместо", просто создай переменные с названиями path и separator.
В переменной path должен быть путь к файлу, в переменной separator - разделитель.
 
  • Спасибо
Реакции: indigo666

indigo666

Client
Регистрация
10.05.2014
Сообщения
1 098
Благодарностей
344
Баллы
83
Не надо ничего вставлять "вместо", просто создай переменные с названиями path и separator.
В переменной path должен быть путь к файлу, в переменной separator - разделитель.
То, что надо было, спасибо!!
 

indigo666

Client
Регистрация
10.05.2014
Сообщения
1 098
Благодарностей
344
Баллы
83
А можно сделать так, чтобы разделитель был не обычным текстом а регулярным выражением?
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 100
Баллы
113
А можно сделать так, чтобы разделитель был не обычным текстом а регулярным выражением?
Замени строку
string[] split = str.Split(new[] {separator}, StringSplitOptions.None);
на
string[] split = Regex.Split(str, separator);
 
  • Спасибо
Реакции: indigo666

indigo666

Client
Регистрация
10.05.2014
Сообщения
1 098
Благодарностей
344
Баллы
83

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