Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/63: Рейтинг темы: голосов - 63, средняя оценка - 4.97
 Аватар для G4W2
0 / 0 / 0
Регистрация: 30.09.2011
Сообщений: 13

Удаление строк из текстового файла

10.12.2011, 10:00. Показов 12172. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет !
Есть текстовый файл где около 100 тыс. строк. Нужно с заданой строки удалить все строки которые шли до нее. Допустим задать 2500 строку и удалить все 2499 строк до нее.
Как можно это осуществить ? Если есть где-то ман по работе с текстом и строками, пожалуйста поделитесь ссылочкой.
Буду примного благодарен всем кто поможет

Добавлено через 13 часов 32 минуты
Весь google перерыл. Везде одна и та же статья по работе со строками, а то чего нужно нет
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.12.2011, 10:00
Ответы с готовыми решениями:

Удаление строк из текстового файла
Задача: есть текстовой файл(а) который содержит много текста допустим объявления. есть еще один текстовой файл(b) с номерами...

Удаление строк из текстового файла
Добрый день! Помогите пожалуйста решить задачу: Есть текстовый файл с большим количеством строк, нужно удалить из него все...

Удаление из текстового документа строк, не удовлетворяющих условию
Доброго времени суток. Существует текстовый документ, содержащий большое количество строк (около 5000). В каждой строке помимо текста...

18
 Аватар для Мастер Шифу
969 / 71 / 9
Регистрация: 15.10.2011
Сообщений: 583
Записей в блоге: 1
10.12.2011, 10:26
1. Открыть файл на чтение.
2. Организовать перебор строк и поиск искомой строки
3. Если строка найдена, по произвести запись всех остальных строк в temp.txt
4. Удалить файл.
5. Переименовать temp.txt в ваш файл.
0
 Аватар для G4W2
0 / 0 / 0
Регистрация: 30.09.2011
Сообщений: 13
10.12.2011, 10:40  [ТС]
Цитата Сообщение от Мастер Шифу Посмотреть сообщение
1. Открыть файл на чтение.
2. Организовать перебор строк и поиск искомой строки
3. Если строка найдена, по произвести запись всех остальных строк в temp.txt
4. Удалить файл.
5. Переименовать temp.txt в ваш файл.
читайте внимательно, прежде чем писать
0
 Аватар для Rajd
44 / 22 / 2
Регистрация: 20.11.2008
Сообщений: 178
10.12.2011, 14:12
Цитата Сообщение от G4W2 Посмотреть сообщение
читайте внимательно, прежде чем писать
А собственно совет, то дельный, делаешь перебор по строкам символов так по 1025.
доходишь до нужного тебе номера и дальше с пункта 3.
0
 Аватар для dtsey
112 / 78 / 30
Регистрация: 10.09.2011
Сообщений: 263
10.12.2011, 14:27
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
var
st: TStringList;
i,n,k: integer; //счетчики (откуда удалять, докуда удалять)
begin
st:=TStringList.Create; //создаем компонент для работы со строками
st.LoadFormFile('mytext.txt'); // загружаем туда строки из файла
i:=StrToInt(Edit1.TExt);
n:=StrToInt(Edit2.TExt);
k:=i; // в n записываем строку, по которую нужно удалять
for i:=StrToInt(Edit1.TExt); to n do st.delete(k); // Удаляем строки
st.SAveTofile(mytext.txt); // сохраняем измененный текст в файл
st.Free; //убиваем компонент, что бы освободить память
end;
2
 Аватар для HyperZen
498 / 251 / 56
Регистрация: 16.06.2011
Сообщений: 904
10.12.2011, 14:34
Цитата Сообщение от dtsey Посмотреть сообщение
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
var
st: TStringList;
i,n,k: integer; //счетчики (откуда удалять, докуда удалять)
begin
st:=TStringList.Create; //создаем компонент для работы со строками
st.LoadFormFile('mytext.txt'); // загружаем туда строки из файла
i:=StrToInt(Edit1.TExt);
n:=StrToInt(Edit2.TExt);
k:=i; // в n записываем строку, по которую нужно удалять
for i:=StrToInt(Edit1.TExt); to n do st.delete(k); // Удаляем строки
st.SAveTofile(mytext.txt); // сохраняем измененный текст в файл
st.Free; //убиваем компонент, что бы освободить память
end;
При работе с файлом в 100 тыс строк думаю будут наблюдаться задержки.
Может использовать поток?!
0
 Аватар для dtsey
112 / 78 / 30
Регистрация: 10.09.2011
Сообщений: 263
10.12.2011, 14:37
Цитата Сообщение от HyperZen Посмотреть сообщение
При работе с файлом в 100 тыс строк думаю будут наблюдаться задержки.
Может использовать поток?!
Очевидно. Но поток я писать не буду. Я предоставил алгоритм, все остальное - работа для ТС.
0
 Аватар для igoriy
873 / 544 / 117
Регистрация: 24.11.2009
Сообщений: 1,329
10.12.2011, 16:43
Цитата Сообщение от HyperZen Посмотреть сообщение
При работе с файлом в 100 тыс строк думаю будут наблюдаться задержки.
Может использовать поток?!
О чем вы говорите - при современных процессорах .У меня удалить все строки до миллионной - заняло 4 секунды.
И опять же потоки - это только эмуляция одновременной работы.Если в одном потоке +++++
а во втором ---------, то результат будет такой +-+-+-+-

G4W2, предложил нормальный вариант
А я хочу предложить свой
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var
List, List1: Tstringlist;
i,n,j: Integer;
begin
n:= StrtoInt(Edit1.Text);
List:= TStringList.Create;
List1:= TStringlist.Create;
List.LoadFromFile(ExtractFilePath(Application.ExeName)+'1.txt');
for I := 0 to n-1 do List.Strings[i]:= '';
for i := 0 to List.Count - 1 do
begin
 if List.Strings[i]<> '' then List1.Add(List.Strings[i]);
end;
 
 
List1.SaveToFile(ExtractFilePath(Application.ExeName)+'1.txt');
List.Free;
List1.Free;
end;
Так как в коде
dtsey, я заметил недочеты
во-первых если делать так то
Цитата Сообщение от HyperZen Посмотреть сообщение
for i:=StrToInt(Edit1.TExt); to n do st.delete(k); // Удаляем строки
удаляться будут не те строки(i увеличивается а число строк в st уменьшается - итог - удаляются не те строки)
во-вторых две описки


Цитата Сообщение от HyperZen Посмотреть сообщение
for i:=StrToInt(Edit1.TExt); to n do st.delete(k); // Удаляем строки
st.SAveTofile(mytext.txt); // сохраняем измененный текст в файл
точка с запятой в середине первой строки и название файла во второй строке без ' '

Добавлено через 9 минут
Алучше вообще так
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var
List, List1: Tstringlist;
i,n,j: Integer;
begin
n:= StrtoInt(Edit1.Text);
List:= TStringList.Create;
List1:= TStringlist.Create;
List.LoadFromFile(ExtractFilePath(Application.ExeName)+'1.txt');
 
for i := n to List.Count - 1 do
begin
  List1.Add(List.Strings[i]);
end;
 
 
List1.SaveToFile(ExtractFilePath(Application.ExeName)+'1.txt');
List.Free;
List1.Free;
end;
1
 Аватар для dtsey
112 / 78 / 30
Регистрация: 10.09.2011
Сообщений: 263
10.12.2011, 17:01
igoriy, я писал код в брузере и был занят другим дело. Прощу прощения за недочеты.
0
 Аватар для igoriy
873 / 544 / 117
Регистрация: 24.11.2009
Сообщений: 1,329
10.12.2011, 17:09
понятно - у меня первый вариант примерно такой же был пока я не увидел
Цитата Сообщение от igoriy Посмотреть сообщение
удаляться будут не те строки(i увеличивается а число строк в st уменьшается - итог - удаляются не те строки)
0
 Аватар для dtsey
112 / 78 / 30
Регистрация: 10.09.2011
Сообщений: 263
10.12.2011, 17:10
Цитата Сообщение от igoriy Посмотреть сообщение
понятно - у меня первый вариант примерно такой же был пока я не увидел
Просто я не тестировал программу
0
 Аватар для G4W2
0 / 0 / 0
Регистрация: 30.09.2011
Сообщений: 13
10.12.2011, 21:53  [ТС]
Спасибо всем за помощь !
0
 Аватар для igoriy
873 / 544 / 117
Регистрация: 24.11.2009
Сообщений: 1,329
16.12.2011, 05:52
вот код о котором вчера разговаривали
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Button2: TButton;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  Path: string;
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then Path:= OpenDialog1.FileName;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
List, List1: Tstringlist;
i,n,j: Integer;
begin
n:= StrtoInt(Edit1.Text);
List:= TStringList.Create;
List1:= TStringlist.Create;
List.LoadFromFile(Path);
for i := n to List.Count - 1 do List1.Add(List.Strings[i]);
List1.SaveToFile(Path);
 
List.Free;
List1.Free;
end;
 
 
 
 
end.
и исходник
Вложения
Тип файла: rar Новая папка (2).rar (319.0 Кб, 69 просмотров)
1
 Аватар для G4W2
0 / 0 / 0
Регистрация: 30.09.2011
Сообщений: 13
16.12.2011, 19:39  [ТС]
Спасибо
0
188 / 120 / 4
Регистрация: 23.01.2010
Сообщений: 1,320
06.09.2013, 10:09
Цитата Сообщение от igoriy Посмотреть сообщение
List.LoadFromFile(ExtractFilePath(Applic ation.ExeName)+'1.txt');
Добрый день, ну вот никак мне не нравится эта строка, поскольку если файл допустим будет 8 gb то атупеет нето комп нето пользователь ждать пока файл загрузиться (опустим факт что таким способом не более 2 гб) но всеже если вы знаете способ более дельный то скажите как удалить из текстового файла с позиции n до позиции k без использования api.
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
06.09.2013, 10:25
Например, TFileStream.
0
Заблокирован
06.09.2013, 10:43
А зачем вообще циклы и прочая лабуда?
Ну сначала про тысячи строк... Подгружайте частями, найдёте нужное место, и тогда - вперёд.
А вперёд, это элементарное копирование потока. Да, это требует памяти. Но количество памяти и скорость всегда были конкурентами. Хотите скорость - гоните памяти побольше, хотите меньше памяти, готовьтесь к длительному процессу со свопингами.
Правда после того, как я связался с KOL я уже основательно подзабыл возможности файловых потоков в основном делфи. Но в KOL я делаю это так...
Открываю файловый поток. Частями загружаю в мемо, или куда там ещё, текст. Получаю позицию обрезки.
Потом открываю другой файловый поток. И копирую в него из первого потока с нужной позиции нужное количество данных. Операция эта хорошо оптимизирована, использует механизм буферизации, и проблем никаких.
Только сомневаюсь чтобы текст был хотя-бы на гиг.
Кстати, в KOL при записи из ричедит (не помню как с мемо) так же нужно определять позицию начала записи и количество записываемых данных. Так что, стоит положится на благоразумность и оптимальность кода записи и попросту, найдя место вырезки, произвести запись нового файла с этими параметрами.
0
188 / 120 / 4
Регистрация: 23.01.2010
Сообщений: 1,320
16.01.2014, 23:52
Цитата Сообщение от G4W2 Посмотреть сообщение
сем привет !
Есть текстовый файл где около 100 тыс. строк. Нужно с заданой строки удалить все строки которые шли до нее. Допустим задать 2500 строку и удалить все 2499 строк до нее.
Как можно это осуществить ? Если есть где-то ман по работе с текстом и строками, пожалуйста поделитесь ссылочкой.
Буду примного благодарен всем кто поможет
есть возможность удалять непосредственно из файла с позиции setfilepointer до n длинной байт и без всей этой лобуды которую предложили ниже.
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,612
17.01.2014, 01:35
Цитата Сообщение от n971030 Посмотреть сообщение
есть возможность удалять непосредственно из файла с позиции setfilepointer до n длинной байт и без всей этой лобуды которую предложили ниже.
А n байт это сколько строк?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.01.2014, 01:35
Помогаю со студенческими работами здесь

удаление пробелы из текстового файла
как можно удалить пробелы между словами которых ты написал в Мемо, и надо вывести правильный ответ в файл.

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

Удаление лишних пробелов из текстового файла.
Загружаю в мемо текстовый файл, в котором в начале каждой строки идут пробелы. Как удалить эти пробелы? сможете мне помочь? спасибо..))

Удаление фигурных скобок из заданного текстового файла
Создать программу, которая удаляет фигурные скобки из заданного текстового файла.

Чтение строк из текстового файла в memo
Привет. Как сделать чтобы при чтении строк из файла такого вида: 123 456,78 789 12,5 987 654 321 98,8 они записывались в memo...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru