Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
172 / 62 / 11
Регистрация: 22.12.2015
Сообщений: 2,475
1

Как создать и проинициализировать динамический массив Unicode строк?

08.09.2019, 12:29. Просмотров 989. Ответов 10
Метки нет (Все метки)

Всем здравствуйте.

Не найдя больше никакой информации по работе с текстовыми Unicode файлами, взялся разбирать файл System.IOUtils.hpp.
Мне нужно записать в файл две строковых переменных, каждую на своей строке.
Нашёл подходящую функцию: WriteAllLines. C первым аргументом вопросов нет - это имя файла куда писать, а вот со вторым - заминка. Нужно организовать строковый массив типа TStringDynArray, занести туда сохраняемые строковые переменные и уже затем подставить имя этого массива вторым аргументом в функцию WriteAllLines.
Пробовал по-разному, ничего не выходит. Последняя из неработающих попыток:
C++
1
2
3
4
5
6
    String s1 = "фывапро";
    String s2 = "йцукен";
    TStringDynArray list[2];
    list[0] = s1;
    list[1] = s2;
    WriteAllLines(ExtractFilePath(ParamStr(0)) + "save.txt", list);
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.09.2019, 12:29
Ответы с готовыми решениями:

Как создать динамический массив строк?
Делаю лабораторную и пока только разбираюсь, как создать динамический массив строк Написал вот...

Как создать и заполнить динамический массив строк типа std::string?
Как создать и заполнить динамический массив строк типа string? Если заполнять массивы через...

Создать динамический массив строк
На С++ относительно мало когда писал, исключительно C#, столкнулся с проблемой, не могу понять как...

Создать динамический массив из строк
Мне нужен такой массив как во вложении, чтобы можно было обращаться к ячейке как array. Спасибо.

10
909 / 588 / 290
Регистрация: 22.02.2018
Сообщений: 1,738
Записей в блоге: 2
08.09.2019, 12:39 2
Лучший ответ Сообщение было отмечено jkrnd как решение

Решение

Цитата Сообщение от jkrnd Посмотреть сообщение
Мне нужно записать в файл две строковых переменных, каждую на своей строке.
А SaveToFile некоторых классов не подходит?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    String s[2]
  TStringList *ls = new TStringList; //можно через "умный" указатель, но я по привычке
 
    s[0] = "фывапро";
    s[1] = "йцукен";
 
  ls->Clear()
 
     for(int i=0; i<2; i++) ls->Items->Add(s[i]);
 
   ls->SaveToFile("somewere to place");
 
 delete ls;
1
172 / 62 / 11
Регистрация: 22.12.2015
Сообщений: 2,475
08.09.2019, 12:53  [ТС] 3
TrollHammer, всё получилось, спасибо. Только хотелось бы разобраться с WriteAllLines. Я наверное неправильно объявляю динамический массив (без new)?

Добавлено через 3 минуты
а как Вашим способом считать информацию из текстового файла с неизвестным количеством строк в строковые переменные или в строковый массив?
0
909 / 588 / 290
Регистрация: 22.02.2018
Сообщений: 1,738
Записей в блоге: 2
08.09.2019, 12:57 4
Цитата Сообщение от jkrnd Посмотреть сообщение
в строковые переменные
В этом случае лучше использовать ini-файлы и классы работы с ними.
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30624 / 19985 / 7814
Регистрация: 22.10.2011
Сообщений: 34,805
Записей в блоге: 6
08.09.2019, 12:58 5
jkrnd, вот такая попытка была?
C++
1
2
3
4
5
6
7
    String s1 = L"фывапро";
    String s2 = L"йцукен";
    TStringDynArray list;
    list.set_length(2);
    list[0] = s1;
    list[1] = s2;
    TFile::WriteAllLines(ExtractFilePath(ParamStr(0)) + "save.txt", list);
2
172 / 62 / 11
Регистрация: 22.12.2015
Сообщений: 2,475
08.09.2019, 13:17  [ТС] 6
volvo, нет, не было.
в блокноте Windows результат ожидаемый, а вот в Texterе:
фывапро
йцукен
Надо как-то кодировку Unicode указать наверное.
Если можно, приведите аналогичный пример с ReadAllLines.

Добавлено через 2 минуты
если добавить:
C++
1
2
3
4
5
6
7
    String s1 = L"фывапро";
    String s2 = L"йцукен";
    TStringDynArray list;
    list.set_length(2);
    list[0] = s1;
    list[1] = s2;
    TFile::WriteAllLines(ExtractFilePath(ParamStr(0)) + "save.txt", list, TEncoding::Unicode);
результат в Textere:
фывапро
йцукен
?
третьей строкой пишется какой-то лишний символ.
0
909 / 588 / 290
Регистрация: 22.02.2018
Сообщений: 1,738
Записей в блоге: 2
08.09.2019, 13:19 7
Цитата Сообщение от jkrnd Посмотреть сообщение
Надо как-то кодировку Unicode указать наверное.
У методов класса TFile, если я не ошибаюсь, есть один параметр для явного указания кодировки
C++
1
TFile::WriteAllLines(ExtractFilePath(ParamStr(0)) + "save.txt", list, TEncoding::[B]КОДИРОВКА[/B]);

Не по теме:

Опоздал :)

1
172 / 62 / 11
Регистрация: 22.12.2015
Сообщений: 2,475
08.09.2019, 13:51  [ТС] 8
volvo, вот окончание фала save.txt в HEX:
04 3D 04 0D 00 0A 00

Добавлено через 1 минуту
целиком:
FF FE 44 04 4B 04 32 04 30 04 3F 04 40 04 3E 04 0D 00 0A 00 39 04 46 04 43 04 3A 04 35 04 3D 04 0D 00 0A 00
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30624 / 19985 / 7814
Регистрация: 22.10.2011
Сообщений: 34,805
Записей в блоге: 6
08.09.2019, 14:59 9
Цитата Сообщение от jkrnd Посмотреть сообщение
а вот в Texterе:
Ты еще какое-нибудь приложение с Windows 3 возьми и в нем проверь. У меня виртуалка с WinXP накрылась, осталась только Win7/Win8, ни там ни там Текстер не запускается. Старый он слишком уже. Не надо на него равняться.
1
jkrnd
08.09.2019, 15:06  [ТС]
  #10

Не по теме:

Цитата Сообщение от volvo Посмотреть сообщение
Старый он
я так привык к нему, ужас!. А Вы чем пользуетесь взамен стандартного блокнота?

0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30624 / 19985 / 7814
Регистрация: 22.10.2011
Сообщений: 34,805
Записей в блоге: 6
08.09.2019, 15:09 11
Я пользуюсь MousePad-ом. А под Windows у меня стоял всегда Notepad++.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.09.2019, 15:09

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Создать двухмерный динамический массив строк
Ввести 2-мерный массив. Количество строк и столбцов заранее неизвестно. Признаком конца ввода...

Создать динамический массив строк, почему не работает?
#include &lt;stdio.h&gt; #include &lt;malloc.h&gt; #include &lt;stdlib.h&gt; void main (void) { char **a; int n,...

Опишите массив из 6-и строк, проинициализировать названиями стран
Опишите массив из 6-и строк, проинициализировать названиями стран.

Создать двухмерный динамический массив в котором размер строк случайное число
Пользователь вводит количество строк двумерного динамического массива. Программа создаёт этот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.