![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#16
|
|||
|
|||
|
Нет вот смотри, есть фойлик C:\1.txt который содержит (текст примерный):
Иван Петров Вася Гулькин Иван Денисов Саша Пупкин я хочу чтобы в этом же файлике после обработки осталось только Иван; Вася; Иван; Саша; просто т.е. остались первые слова и добавились точки с запятой в конце... Изначально еще просто строки в файле могут начанаться с пробелов, а я так понимаю что это еще одна сложность.. ![]() |
|
#17
|
|||
|
|||
|
Я конечно не могу так изящно как The Shadow, но вот это у меня только что сработало без проблем:
Код:
procedure TForm1.FormCreate(Sender: TObject);
var
txtFile : TStrings;
i : integer;
str : string;
begin
txtFile := TStringList.create; // создаем объект
txtFile.LoadFromFile(ExtractFilePath(Application.ExeName)+'1.txt'); // читаем файл из папки с прогой
for i := 0 to txtFile.Count - 1 do begin
str := TrimLeft(txtFile.Strings [i]); // сразу убераем пробелы в начале
str := copy(str,0,pos(' ',(str))-1)+ ';'; // копируем с начала до первого пробела и прибавляем в конце ';'
txtFile.Strings[i] := str; // заменяем эту строку созданной
end;
txtFile.SaveToFile(ExtractFilePath(Application.ExeName)+'2.txt'); // сохраняем в файл
txtFile.Free; // освобождаем память
end;Считало из одного файла (пробелы добавил специально) Код:
Иван Петров
Вася Гулькин
Иван Денисов
Саша ПупкинКод:
Иван; Вася; Иван; Саша; |
|
#18
|
|||
|
|||
|
Вылетает с ошибкой:
Project.exe raised exception class EFOpenError with message 'Cannot open file C:\Program Files\Borland\delphi6\Projects\C:\Statistic\1.xxx. txt'. Process stoped...... Все имена и пути проверил все сходиться. Что может быть? ![]() |
|
#19
|
|||
|
|||
|
Кстати спасибо что помогаешь....
![]() |
|
#20
|
|||
|
|||
|
Дык ты не ставь путь. У тебя похоже забито так:
txtFile.LoadFromFile(ExtractFilePath(Application.E xeName)+'C:\Statistic\1.xxx. txt'); Сделай так: txtFile.LoadFromFile(ExtractFilePath(Application.E xeName)+'\Statistic\1.xxx.txt'); Либо если у тебя где-то конкретно хранится, то так: txtFile.LoadFromFile('C:\Statistic\1.xxx.txt'); |
|
#21
|
|||
|
|||
|
Понятно....)))) Все пошло Спасибо.
|
|
#22
|
|||
|
|||
|
Да пожалуйста.
![]() Только все равно допиши проверки всякие - случаи разные бывают. Вдруг пустая строка или уже обработанная... Я если что-то пишу обычно стараюсь обработать даже самые нелепые ситуации чтобы потом проблем было меньше. ![]() |
|
#23
|
|||
|
|||
|
Слушай а если строка состоит из одного слова, то остается только ";" блин еще одна проблемка, не подскажешь как быть?
|
|
#24
|
|||
|
|||
|
Все есть в комментариях. Вкратце: проверяем пробел есть или нет (если нет то одно слово). Если нет пробела то смотрим ставили ли точку с запятой или нет (ставим если ее нет) и заодно проверяет на пустую строку - ничего с ней не делает и переходит к следующей.
Код:
procedure TForm1.FormCreate(Sender: TObject);
var
txtFile : TStrings;
i : integer;
str : string;
begin
txtFile := TStringList.create; // создаем объект
txtFile.LoadFromFile(ExtractFilePath(Application.ExeName)+'1.txt'); // читаем файл из папки с прогой
for i := 0 to txtFile.Count - 1 do begin
str := TrimLeft(txtFile.Strings [i]); // сразу убераем пробелы в начале
if Length(str)>0 then begin // проверка на пустую строку
if pos(' ',str) > 0 then begin // ищем пробел
str := copy(str,0,pos(' ',(str))-1)+ ';'; // копируем с начала до первого пробела и прибавляем в конце ';'
end else begin // пробела нет
if pos(';',str) = 0 then begin // обрабатывали или нет
str := str + ';';
end;
end;
end;
txtFile.Strings[i] := str; // заменяем эту строку созданной
end;
txtFile.SaveToFile(ExtractFilePath(Application.ExeName)+'2.txt'); // сохраняем в файл
txtFile.Free; // освобождаем память
end;Код:
Обрабатывал такой пример:
Иван Петров
Вася Гулькин
Иван Денисов
петя;
Саша Пупкин
коля
Получил во втором файле:
Иван;
Вася;
Иван;
петя;
Саша;
коля; |
|
#25
|
|||
|
|||
|
И еще подскажите пожалуйста как во всех текстовых файлах находящихся в папке удалить первую строчку... Название файлов может быть разное. Спасибо.
|
|
#26
|
||||
|
||||
|
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
SR: TSearchRec;
begin
if FindFirst('Папка\*.txt', faAnyFile, SR) = 0 then
repeat
with TStringList.Create do
begin
LoadFromFile('Папка\' + SR.Name);
if Count > 1 then
Delete(0);
SaveToFile('Папка\' + SR.Name);
Free;
end;
until FindNext(SR) <> 0;
FindClose(SR);
end; |
|
#27
|
|||
|
|||
|
Поиск по маске, а дальше все зависит от того, что ты понимаешь под первой строчкой.
Код:
procedure TForm1.Delete1stLine(APath : String); // APath - стартовый путь
var
iFound : Integer;
F : TSearhcRec;
List : TStringList;
begin
APAth := IncludeTrailingPathDelimiter(APath); // на всякий случай
iFound := FindFirst(IncludeTrailingPathDelimiter(APath) + '*.*',faAnyFile,F);
While iFound = 0 Do
Begin
If (F.Attr And faDirectory) <> 0
Then
Begin
// Папка
If (F.Name <> '.') And (F.Name <> '..')
Then Delete1stLine(APath + F.Name); // Если по подпапка ненадо, то не вызывать
End
Else
Begin
// Файл
If MatchesMask(F.Name,'*.txt') Then // здесь указать маску файла
Begin
List := TStringList.Create;
List.LoadFromFile(APath + F.Name);
List.Delete(0);
List.SaveTofile(APath + F.Name);
List.Free;
End;
Endl
End;
end;Удаляет первую физическую строку из файлов *.txt с проходом по подкаталогам. |
|
#28
|
|||
|
|||
|
Спасибо. Блин ну и мозги у вас ребята... ))
|
|
#29
|
|||
|
|||
|
Вообще, вопрос по перебору файлов надо, наверное, уже куда-нить вынести и прибить гвоздями. а за его повторное задавание лупить из плюсомета. На моей памяти он поднимается уже раз 4 или 5ый в разных вариациях.
|
|
#30
|
|||
|
|||
|
Здравствуйте. Опять нужна ваша помощь. Хочу разобраться как сделать.
Есть текстовый файлик Билет.txt, со строгой структурой следующего содержания: Билет,Номер рейса,525545545,цена билета,4525.50,+0000000001,Чек №12,11:21:44,всего уплачено: 4525.50, 0.00, Билет,Номер рейса,525548585,цена билета,4000.50,+0000000001,Чек №12,11:21:44,всего уплачено: 4000.50, 0.00, Билет,Номер рейса,562214,цена билета,2000.50,+0000000001,Чек №15,11:21:44,всего уплачено: 2000.50, 0.00, Билет,Номер рейса,562564,цена билета,3000.50,+0000000001,Чек №18,11:21:44,всего уплачено: 3000.50, 0.00, Билет,Номер рейса,562564,цена билета,3000.50,+0000000001,Чек №19,11:21:44,всего уплачено: 3000.50, 0.00, А результатом хочу чтобы получилось следующее в одном файле допустим "Номер рейса.txt": 12 // номер чека 525545545, //номера рейса 525548585, 15 //номер чека 562214, //номера рейса 18 //номер чека 562564, //номера рейса 19, //номер чека 562564, //номера рейса Если в одном чеке два рейса как в строке 1 и 2 файла Билет.txt тогда номерчека чтобы не повторялся а посто писались номера рейса для этого чека. И в другом файле чтобы получилось следующее в одном файле допустим "Стоимость рейса.txt": 12 // номер чека 4525.50 //всего получено 4000.50 15 //номер чека 2000.50 //всего получено 18 //номер чека 3000.50 //всего получено 19, //номер чека 3000.50 //всего получено Помогите пожалуйста. Спасибо. |