|
|
Регистрация | << Правила форума >> | 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; Что делать, когда сломался комп: 1. Если вы юзер - делать ноги. 2. Если ремонтник - делать деньги. 3. Если вы программист - делать вид, что так было задумано. |
#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
|
|||
|
|||
Help....
Здравствуйте. Опять нужна ваша помощь. Хочу разобраться как сделать.
Есть текстовый файлик Билет.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 //всего получено Помогите пожалуйста. Спасибо. |