Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
1

Работа со строками

24.09.2013, 23:58. Показов 2538. Ответов 27
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот у меня есть файлик в которм есть текст, я должен по определенному кретерию скопировать это в новый файлик .
Вопрос:Вот я связал файловую переменную и файл.
Этого достаточно, что бы я мог допустим курсор нажание 3 строку принудительно поставил или содержание файловой переменной
я должен кинуть в Мемо ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.09.2013, 23:58
Ответы с готовыми решениями:

Работа со строками, заполнить компоненты строками из файла
Привет! Нужна помощь в заполнении формы В общем, есть форма отправки письма. У нее есть 2 функции,...

Работа со строками(операции над строками)
Пусть дана последовательность, содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных...

Работа со строками. Функции работы со строками
Дана строка символов. В заданном тексте определить позицию первой точки ‘ . ‘.

Задание по темам: ООП, исключения, работа со строками (возможно применение коллекций List), работа с компоновщиком
ТЯЖЕЛО РАБОТАТЬ С КОМПОНОВЩИКОМ. БУДУ РАД ВАШИМ ОТВЕТАМ. 1. Ознакомиться с принципом работы...

27
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
25.09.2013, 00:05 2
Цитата Сообщение от iluxa1810 Посмотреть сообщение
или содержание файловой переменной
я должен кинуть в Мемо ?
Не кинешь ты его туда при всем желании.
0
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,250
25.09.2013, 00:13 3
И вообще. Текстовый файл это устройство с последовательным доступом. Не прочитав первые две строки на третью не попадешь никак.
0
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
25.09.2013, 00:16  [ТС] 4
А как мне тогда организовать посирочное считывание из файла?
0
Заблокирован
25.09.2013, 02:15 5
iluxa1810,
"Посирочное" - никак
А построчное - очень просто. Только файл нужно открыть как поток. А поток может быть строковый. Или самому организовать поиск строк в потоке.
0
angstrom
25.09.2013, 02:23 6
Кто мешает загрузить в TStringList? Будет и построчное.
Заблокирован
25.09.2013, 02:25 7
Но из того что вы понаписали ничего не понятно. Что вам и для чего нужно.
0
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
26.09.2013, 00:02  [ТС] 8
Цитата Сообщение от Lirrk Посмотреть сообщение
Но из того что вы понаписали ничего не понятно. Что вам и для чего нужно.
Ну есть XML файл который имеет что-то вроде такой стрктуры
<Project=[Название проекта]>
Содержание проекта
</Project>
Следом за закрытием блока тег проект опять открывается и инфа о новом проекте.
Надо сделать так,что бы по каждому проекту из 1 XML образовались XML по каждому проекту в отдельности.
В принципе алгоритм на уме уже вертится, осталось правильно работать со строками...
Я их только когда учился юзал. и то пару раз...
0
Заблокирован
26.09.2013, 01:00 9
iluxa1810,
Ну это то понятно. Но непонятно другое.
У вас XML файл. Это ясно.
Вам нужно разбить его на отдельные файлы.
Но там ведь нужен ещё заголовок и прочая мура.
Вы бы показали на примере одного кусочка что должно получится в самом конце.
То есть пример полного файла.
То есть исходный файл и конечный. один.
Как это сделать - дело техники.
Я могу только написать как вычленить, а что с ним делать дальше?
Ну предположим у вас есть файл- заготовка, в который надо вставить этот кусок и записать в отдельный файл...

ну хорошо... Берём TStringList, скажем с именем L_L и загружаем в него ваш файл.
var
L_L :TStringList;

Создаём
L_L :=TStringList.create;

Загружаем
L_L.LoadFromFile('имя фашего файла');
Потом берём строку. скажем S_S и копируем содержимое туда

S_S:= L_L.text;

Вот со строкой будем работать
Работаем церез цикл While поскольку не знаем сколько у вас этих структур.
И организовываем счётчик
Есть функция поиска PosEx прочитайте как она работает. http://www.kansoftware.ru/?tid=5043
Ищем начало <Project=
Функция выдаст позицию И тут же инкримируем счётчик структур
Потом ищем конец </Project>
Всё, У нас есть начало и конец.
К концу прибавляем длину закрывающего тега </Project> это 10 символов
И из конца вычитаем начало и функцией copy получаем фаш фрагмент, котрый сохраняем в перменной, скажем F_F
Ну а далее делайте с ним что хотите.
Скажем у вас есть заготовка (шаблон) куда его нужно воткнуть. Это шаблон копируем в L_L вставляем в нужное место ваш фрагмент.
Всё, готово. Сохраняем. L_L.SaveToFile('Префикс имени'+IntToStr(C_F)+'.xml');
C_F - Это счётчик найденных фрагментов, о котором я говорил. Например префикс X И тогда имя первого файла будет X1.xml У второго X2.xml и так далее.

Когда PosEx при поиске очередного <Project= выдаст 0, это значит все нужные фрагменты закончились и по этому признаку останавливаем цикл. Всё. Работа завершена.

Вот где-то так...
Но для более детального разбора нужен исходный файл и пример одного, что должно получится.

Вот здесь справочник по всему, что есть в делфи http://www.delphibasics.ru/

Тут список процедур и функций работы со строками http://platonov-andrei.narod.r... utines.htm

Тут почитайте http://www.delphi-manual.ru/work-with-strings.php
0
669 / 559 / 242
Регистрация: 26.11.2012
Сообщений: 2,191
26.09.2013, 07:14 10
А что мешает работать с xml файлом средствами xml в Delphi?
0
Заблокирован
26.09.2013, 10:59 11
ZfoxAK,
Это всё равно что забивать булавки кувалдой.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32830 / 21168 / 8147
Регистрация: 22.10.2011
Сообщений: 36,429
Записей в блоге: 8
26.09.2013, 11:11 12
Цитата Сообщение от Lirrk Посмотреть сообщение
Вот со строкой будем работать
Работаем церез цикл While поскольку не знаем сколько у вас этих структур.
И организовываем счётчик
Есть функция поиска PosEx прочитайте как она работает. http://www.kansoftware.ru/?tid=5043
Ищем начало <Project=
Функция выдаст позицию И тут же инкримируем счётчик структур
Потом ищем конец </Project>
Всё, У нас есть начало и конец.
К концу прибавляем длину закрывающего тега </Project> это 10 символов
И из конца вычитаем начало и функцией copy получаем фаш фрагмент, котрый сохраняем в перменной, скажем F_F
Ну а далее делайте с ним что хотите.
Скажем у вас есть заготовка (шаблон) куда его нужно воткнуть. Это шаблон копируем в L_L вставляем в нужное место ваш фрагмент.
Всё, готово. Сохраняем. L_L.SaveToFile('Префикс имени'+IntToStr(C_F)+'.xml');
C_F - Это счётчик найденных фрагментов, о котором я говорил. Например префикс X И тогда имя первого файла будет X1.xml У второго X2.xml и так далее.
Когда PosEx при поиске очередного <Project= выдаст 0, это значит все нужные фрагменты закончились и по этому признаку останавливаем цикл. Всё. Работа завершена.
Это все делается в 2 строки с использованием XMLDOM... Одна строка - выборка всех тегов "<Project ...>", а вторая - занесение каждого найденного фрагмента туда, куда нужно... Пиши дальше свой велосипед.
1
Заблокирован
26.09.2013, 11:47 13
UI,
Я понимаю. что вы оседлали своего любимого конька. Судя по вашим постам можно легко проследить что и когда вы освоили. Только вот лишние модули - лишние проблемы. Начните писать утилитку на чистом апи, и воткните в неё любой модуль. И радуйтесь как утилитка раздуется. Для компа это фигня. А вот если вы пишите на мобильные системы, где мало памяти и проц не очень...
Отказатся от удобств ООП очень сложно, понимаю. Но именно в оптимизации дело. Зачем подрубать модуль, когда всего-то нужно найти два тега и вычлинить всё между ними?
Ну а если вы пишите читалку или что-то вроде, или вам нужно разобрать, например, по кусочкам 3D модель - тогда уж можно подумать и про огромный модуль.
1
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
28.09.2013, 12:47  [ТС] 14
Цитата Сообщение от ZfoxAK Посмотреть сообщение
А что мешает работать с xml файлом средствами xml в Delphi?
Поподробнее.

Добавлено через 3 минуты
Цитата Сообщение от Lirrk Посмотреть сообщение
iluxa1810,
Ну это то понятно. Но непонятно другое.
У вас XML файл. Это ясно.
Вам нужно разбить его на отдельные файлы.
Но там ведь нужен ещё заголовок и прочая мура.
Вы бы показали на примере одного кусочка что должно получится в самом конце.
То есть пример полного файла.
То есть исходный файл и конечный. один.
Как это сделать - дело техники.
Я могу только написать как вычленить, а что с ним делать дальше?
Ну предположим у вас есть файл- заготовка, в который надо вставить этот кусок и записать в отдельный файл...
ну хорошо... Берём TStringList, скажем с именем L_L и загружаем в него ваш файл.
var
L_L :TStringList;
Создаём
L_L :=TStringList.create;
Загружаем
L_L.LoadFromFile('имя фашего файла');
Потом берём строку. скажем S_S и копируем содержимое туда
S_S:= L_L.text;
Вот со строкой будем работать
Работаем церез цикл While поскольку не знаем сколько у вас этих структур.
И организовываем счётчик
Есть функция поиска PosEx прочитайте как она работает. http://www.kansoftware.ru/?tid=5043
Ищем начало <Project=
Функция выдаст позицию И тут же инкримируем счётчик структур
Потом ищем конец </Project>
Всё, У нас есть начало и конец.
К концу прибавляем длину закрывающего тега </Project> это 10 символов
И из конца вычитаем начало и функцией copy получаем фаш фрагмент, котрый сохраняем в перменной, скажем F_F
Ну а далее делайте с ним что хотите.
Скажем у вас есть заготовка (шаблон) куда его нужно воткнуть. Это шаблон копируем в L_L вставляем в нужное место ваш фрагмент.
Всё, готово. Сохраняем. L_L.SaveToFile('Префикс имени'+IntToStr(C_F)+'.xml');
C_F - Это счётчик найденных фрагментов, о котором я говорил. Например префикс X И тогда имя первого файла будет X1.xml У второго X2.xml и так далее.
Когда PosEx при поиске очередного <Project= выдаст 0, это значит все нужные фрагменты закончились и по этому признаку останавливаем цикл. Всё. Работа завершена.
Вот где-то так...
Но для более детального разбора нужен исходный файл и пример одного, что должно получится.
Вот здесь справочник по всему, что есть в делфи http://www.delphibasics.ru/
Тут список процедур и функций работы со строками http://platonov-andrei.narod.r... utines.htm
Тут почитайте http://www.delphi-manual.ru/work-with-strings.php
Как я понял,я должен из файла считывать по 1 строке в строковую переменную типа стринг,потом проверять условие начала записи <project> и конца записи </project>,а потом из этой переменной копировать в новый файл?
А у переменной типа TStringList вроде есть параметр [i], который позволяет путешествовать по строкам?
0
Заблокирован
28.09.2013, 14:28 15
iluxa1810,
Нет. TStringList играет вспомогательную роль. Для загрузки и формирования готового текста. А весь анализ происходит в единственной строке.

Добавлено через 27 минут
Я же говорю, давайте что вам надо. Исходный файл и пример того что должно выйти. И я вам сделаю.
1
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
28.09.2013, 15:39  [ТС] 16
Цитата Сообщение от Lirrk Посмотреть сообщение
iluxa1810,
Нет. TStringList играет вспомогательную роль. Для загрузки и формирования готового текста. А весь анализ происходит в единственной строке.

Добавлено через 27 минут
Я же говорю, давайте что вам надо. Исходный файл и пример того что должно выйти. И я вам сделаю.
Файлы на работе =(
И так не интересно, я хотел сам все сделать=)

Добавлено через 9 минут
В единственной строке,т.е все строки XML записываются как 1 ?
В таком случае,вот я нашел 1 структуру, как потом сказать , что бы следующий анализ начался с конца закрытия проджекта ?
0
Заблокирован
28.09.2013, 16:48 17
с конца закрытия чего?
Я же вам написал.
Delphi
1
2
3
4
5
6
7
8
var
L_L :TStringList;//Описываем
//Создаём
L_L :=TStringList.create;
//Загружаем
L_L.LoadFromFile('имя фашего файла');
//Потом берём строку. скажем S_S и копируем содержимое туда
S_S:= L_L.text;
теперь у вас в одной строке всё. в строке S_S

Теперь запускаем цикл While

Delphi
1
2
3
4
5
6
Go:= true;
While Go do begin
 
//Вот тут делаем анализ
~~~~~~~~~~~~~~~~
end;
Анализом является поиск нужных тегов. Начального и конечного
Ищем начальный.
У наc есть две переменные Pos1 и Pos2
Pos1 - позиция начального тега
Pos2 - позиция конечного тега

Перед тем как запустить цикл, инициализируем Pos2
Pos2:=1;
Дело тут вот в чём. Pos2 - Это конец нужной структуры и следовательно отправная поиска точка следующей.
Инициализируя. мы даём понять. что начинаем анализ с первой позиции.

Поиск ведём функцией PosEx (http://www.kansoftware.ru/?tid=5043)
В отличии от POS Она ведёт поиск не с начала, как POS, а с заданной позиции.
Для её использования нужно подключить модуль StrUtils, если он не подключен.

Добавлено через 5 минут
Итак, ищем начальный тег. У вас это <Project
Delphi
1
Pos1:= PosEx('<Project',S_S,Pos2);//Ищем подстроку '<Project' в строке S_S, начиная с позиции Pos2
Как я уе писал, первоначально Pos2 равна позиции начала текста.

Добавлено через 1 минуту
Если этого слова не найдено, Pos1 будет равна нулю. Это значит, что структуры нет или они закончились. По этому условию выходим из цикла.

Добавлено через 2 минуты
Delphi
1
2
3
4
if pos1 = 0 then begin
                          Go:= false;//Создаём условие выхода
                          Cоntinue;
                      end;
Добавлено через 4 минуты
Собираем всё вместе, получаем.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
Uses StrUtils; //Подключаем модуль
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Pos2:=1;
Go:= true;
While Go do begin
//Ищем подстроку '<Project' в строке S_S, начиная с позиции Pos2 
Pos1:= PosEx('<Project',S_S,Pos2);
if pos1 = 0 then begin
                          Go:= false;//Создаём условие выхода
                          Cоntinue;
                      end;
end;
Добавлено через 3 минуты
Всё, начало нам известно, ищем конец.
Delphi
1
2
//Мы закончили на позиции Pos1, с неё и продолжаем поиск
Pos2:= PosEx('</Project',S_S,Pos1);
Добавлено через 1 минуту
Delphi
1
2
3
Нашли конец. 
Поскольку нам нужен тег целиком, а в нём 10 символов, то тогда так
Pos2:= PosEx('</Project',S_S,Pos1) + 10;
Добавлено через 2 минуты
Delphi
1
2
//Вырезаем фрагмент
F_F:=Copy(S_S,Pos1,Pos2-Pos1);
Всё, ваша структура получена, делайте с ней, что хотите.
И следующий поиск будет с pos2, то есть продолжаем "шерстить" строку далше
1
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
28.09.2013, 16:55  [ТС] 18
Добавлено через 33 секунды
Спасибо
0
Заблокирован
28.09.2013, 16:57 19
И вот, наконец...

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Uses StrUtils; //Подключаем модуль
 
var
L_L :TStringList;//Обьявляем список
 
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
//Создаём
L_L :=TStringList.create;
//Загружаем
L_L.LoadFromFile('имя фашего файла');
//Потом берём строку. скажем S_S и копируем содержимое туда
S_S:= L_L.text;
 
 
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
NF:=0;//Инициализируем счётчик найденных структур
Pos2:=1;
Go:= true;
While Go do begin
//Ищем подстроку '<Project' в строке S_S, начиная с позиции Pos2 
Pos1:= PosEx('<Project',S_S,Pos2);
if pos1 = 0 then begin
                          Go:= false;//Создаём условие выхода
                          Cоntinue;
                      end;
//Мы закончили на позиции Pos1, с неё и продолжаем поиск
//Нашли конец. 
//Поскольку нам нужен тег целиком, а в нём 10 символов, то тогда так
Pos2:= PosEx('</Project',S_S,Pos1) + 10; 
 
//Вырезаем фрагмент
F_F:=Copy(S_S,Pos1,Pos2-Pos1);
 
//Копируем фрагмент в список
L_L.Text:=F_F;
 
NF:= NF+1;//Это будет номер сохраняемого файла
//Сохраняем файл
L_L.SaveToFile('F_'+ IntToStr(NF)+'.xml');
 
end;
Добавлено через 58 секунд
Это всё. Готовый код, только нужно всё поставить по местам.
Объявить переменные и так далее.
1
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
28.09.2013, 17:24  [ТС] 20
Цитата Сообщение от Lirrk Посмотреть сообщение
И вот, наконец...

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Uses StrUtils; //Подключаем модуль
 
var
L_L :TStringList;//Обьявляем список
 
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
//Создаём
L_L :=TStringList.create;
//Загружаем
L_L.LoadFromFile('имя фашего файла');
//Потом берём строку. скажем S_S и копируем содержимое туда
S_S:= L_L.text;
 
 
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
NF:=0;//Инициализируем счётчик найденных структур
Pos2:=1;
Go:= true;
While Go do begin
//Ищем подстроку '<Project' в строке S_S, начиная с позиции Pos2 
Pos1:= PosEx('<Project',S_S,Pos2);
if pos1 = 0 then begin
                          Go:= false;//Создаём условие выхода
                          Cоntinue;
                      end;
//Мы закончили на позиции Pos1, с неё и продолжаем поиск
//Нашли конец. 
//Поскольку нам нужен тег целиком, а в нём 10 символов, то тогда так
Pos2:= PosEx('</Project',S_S,Pos1) + 10; 
 
//Вырезаем фрагмент
F_F:=Copy(S_S,Pos1,Pos2-Pos1);
 
//Копируем фрагмент в список
L_L.Text:=F_F;
 
NF:= NF+1;//Это будет номер сохраняемого файла
//Сохраняем файл
L_L.SaveToFile('F_'+ IntToStr(NF)+'.xml');
 
end;
Добавлено через 58 секунд
Это всё. Готовый код, только нужно всё поставить по местам.
Объявить переменные и так далее.
А не подскажешь, как в делфи можно скармить целый каталог с этими XML ?
Что бы он во всех XML проделал эту операцию.
0
28.09.2013, 17:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.09.2013, 17:24
Помогаю со студенческими работами здесь

Работа со строками
дано число К и тестовый файл. вставить пустую строку после строки с номером К, если такой нет то...

Работа со строками
Помогите пожалуйста Дана строка.Преобразовать все буквы &quot;т&quot; в буквы &quot;е&quot; ,цифры 6 и 8 в цифру 0.

Работа со строками
1) пользователь вводит строку текста. программа должна подсчитать сколько раз встречается буква &quot;а&quot;...

Работа со строками
дано предложение. Все пробелы в нем заменить на символ «_». очень нужна ваша помощь. спасибо...

Работа со строками
Помогите с заданием ПС))) Даны 4 последовательности, каждая из 3 - х символов и текст, ...

Работа со строками
1. Дано слово из четного числа букв. Поменять местами его половины.


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru