![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | 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 //всего получено Помогите пожалуйста. Спасибо.  |