|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Работа с текстовым файлом
подскажите пожалуйста мастера как можно в текстовом файле оставить нужные куски текста? Допустим есть текстовый файл с содежимым:
Саша 47 .... какой-то текст НатаШа 56.... дальше не нужный текст Саша 78.... какой-то текст НатаШа 71..... нужно чтобы осталось Саша 47 .... какой-то текст НатаШа 56.... Саша 78.... какой-то текст НатаШа 71..... т.е. нужно чтобы остались только нужные куски. Саша и Наташа в одной строке не попадаются. Бьюсь ни как не могу додуматься как сделать. Подскажите с примером плиз. Спсибо. |
#2
|
||||
|
||||
Код:
var i: Integer; ... with TStringList.Create do begin LoadFromFile('f.txt'); for i:=0 to Count - 1 do if not ((Pos('САША', AnsiUpperCase(Strings[i])) <> 0) or (Pos('НАТАША', AnsiUpperCase(Strings[i])) <> 0)) then Delete(i); SaveToFile('f.txt'); Free; end; Что делать, когда сломался комп: 1. Если вы юзер - делать ноги. 2. Если ремонтник - делать деньги. 3. Если вы программист - делать вид, что так было задумано. |
#3
|
|||
|
|||
Ошибку выдает.. (
Выдает ошибку
Project Project1.exe raised exception class EStringListError with message 'List index out of bounds (1020)'. Progress stopped. Use Step or Run to continue. Что такое? |
#4
|
||||
|
||||
Не знаю почему так получилось
Код:
var i: Integer; f: Array of String; tmp: String; begin AssignFile(Input, 'f.txt'); Reset(Input); while not Eof(Input) do begin Readln(Input, tmp); if (Pos('САША', AnsiUpperCase(tmp)) <> 0) or (Pos('НАТАША', AnsiUpperCase(tmp)) <> 0) then begin SetLength(f, Length(f) + 1); f[High(f)]:=tmp; end; end; CloseFile(Input); Rewrite(Input); for i:=0 to Length(f) - 1 do Writeln(Input, f[i]); CloseFile(Input); end; Что делать, когда сломался комп: 1. Если вы юзер - делать ноги. 2. Если ремонтник - делать деньги. 3. Если вы программист - делать вид, что так было задумано. |
#5
|
|||
|
|||
Не то....
В файле остается только Саша и Наташа, а как же текст между ними , нужно чтобы текст между ними тоже оставался...
|
#6
|
||||
|
||||
Значит я не так понял условие, а что именно должно остаться?
Что делать, когда сломался комп: 1. Если вы юзер - делать ноги. 2. Если ремонтник - делать деньги. 3. Если вы программист - делать вид, что так было задумано. |
#7
|
|||
|
|||
Вот смотри есть текст в текстовом файле (большом):
сдесь текст который не нужен............ // этот текст не должен попасть в результат Саша №45 //этот текст попадает в результат сдесь текст кторый нужен и должен остаться НаТаша №90 сдесь текст который не нужен............ // этот текст не должен попасть в результат Саша №56 //этот текст попадает в результат сдесь текст кторый нужен и должен остаться НаТаша №78 и.т.д. в результате должно сотаться: Саша №45 //этот текст попадает в результат сдесь текст кторый нужен и должен остаться НаТаша №90 СаШа №56 //этот текст попадает в результат сдесь текст кторый нужен и должен остаться НаТаша №78 вот.. |
#8
|
||||
|
||||
То есть от Саши до Наташи надо, от Наташи до Саши не надо?
Что делать, когда сломался комп: 1. Если вы юзер - делать ноги. 2. Если ремонтник - делать деньги. 3. Если вы программист - делать вид, что так было задумано. |
#9
|
|||
|
|||
ДА в точку
|
#10
|
||||
|
||||
Код:
var i: Integer; F: Array of String; Tmp: String; DoCopy: Boolean; begin DoCopy:=False; AssignFile(Input, 'f.txt'); Reset(Input); while not Eof(Input) do begin Readln(Input, Tmp); if Pos('САША', AnsiUpperCase(Tmp)) <> 0 then DoCopy:=True; if DoCopy then begin SetLength(F, Length(f) + 1); F[High(F)]:=Tmp; end; if Pos('НАТАША', AnsiUpperCase(Tmp)) <> 0 then DoCopy:=False; end; CloseFile(Input); Rewrite(Input); for i:=0 to Length(F) - 1 do Writeln(Input, F[i]); CloseFile(Input); end; Что делать, когда сломался комп: 1. Если вы юзер - делать ноги. 2. Если ремонтник - делать деньги. 3. Если вы программист - делать вид, что так было задумано. |
#11
|
|||
|
|||
ВСЕ ОТЛИЧНО!!! РАБОТАЕТ!!! СПАСИБО!!! ОГРОМНОЕ СПАСИБО. ТЫ МЕНЯ СПАС...
|
#12
|
|||
|
|||
И еще вопросик... Подскажите пожалуйста как обрезать в текстовом файле длину строк до одного слова, и в конце оставщегося слова добавить ; И еще одна сложность в начале строки могут начанаться с пробела. , а мне нужно 1 слово.
Например: есть текст: Иван ПетроВ Сергей Коновалов Саша Пупкин и.т.д. а должно остаться: Иван; Сергей; Саша; и.т.д Спасибо |
#13
|
|||
|
|||
Конструкция типа str = str + ';' добавит в конце точку с запятой.
И попробуй вот так обрезать: Код:
procedure TForm1.Edit1Change(Sender: TObject); begin Edit2.Text := TrimLeft(copy(Edit1.Text,0,pos(' ',(Edit1.Text))-1)+ ';'); end; Еще забыл - обрезать пробелы в начале можно командой TrimLeft. Последний раз редактировалось JIexa21, 28.07.2008 в 13:41. |
#14
|
|||
|
|||
Это конечно хорошо, спасибо за подсказку, только вот как это все применить к текстовому файлику в котором очень много строк?
|
#15
|
|||
|
|||
Честно говоря я не совсем понял содержимое твоего текстового файла. Сначала у тебя одни условия, потом другие... Поэтому дал строчку которую я бы сделал у себя при похожих условиях. Или это два разных файла?
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|