这是如何将所有内容复制到第一个空格
s:=copy(s,1,pos(' ',s)-1);
这是如何将所有内容复制到第二个空格
s:=copy(s,2,pos(' ',s)-1);
但是如何将所有内容从行首复制到最后一个空格?
也就是说,像这样的行:
str str str 123
str str 555
str 777
输出是:
str str str
str str
str
这是如何将所有内容复制到第一个空格
s:=copy(s,1,pos(' ',s)-1);
这是如何将所有内容复制到第二个空格
s:=copy(s,2,pos(' ',s)-1);
但是如何将所有内容从行首复制到最后一个空格?
也就是说,像这样的行:
str str str 123
str str 555
str 777
输出是:
str str str
str str
str
如何通过删除所有https 和 http来切断Memo1中域的链接。
https://site1.ru/threads/fdfddd2/
http://site2.ru/threads/fdfddd23434/
https://site3.ru/threads/fdfddd434/
输出会是什么
site1.ru
site2.ru
site3.ru
我是这样剪的,但是如果有1000-3000个链接就很长了!
// В начале удаляю все до //
for i:= 0 to Memo1.Lines.Count - 1 do
Memo1.Lines[i]:= Copy(Memo1.Lines[i], Pos('/', Memo1.Lines[i]) + 2, MaxInt);
// А после удаляю все после
for i:= 0 to Memo1.Lines.Count - 1 do
Memo1.Lines[i]:= Copy(Memo1.Lines[i], 1, Pos('/', Memo1.Lines[i])-1);
如何在编辑中显示特殊字符?可以在 Edit1.Text 中指定要删除的字符吗?
if s[i] in ['!', '+'] then
Delete(s, i, 1)
如果我喜欢这样
if s[i] in CharinSet(edit1.Text) // то получаю ошибку
Delete(s, i, 1)
在这种情况下怎么办?
如何保存所有重复的行,准确保存而不是删除。
这就是删除重复项的方式,但我想知道如何将它们保存在单独的文件中?
var
f1: TextFile;
st: string;
s: TStringList;
begin
AssignFile(f1, '1.txt');
reset(f1);
s := TStringList.Create;
While not EOF(f1) do
begin
readln(f1, st);
If s.IndexOf(st) < 0 then
s.Add(st);
end;
s.SaveToFile('2.txt');
s.Free;
CloseFile(f1);
end;
也就是说,有几行:
123
123
4444
55555
123
和基本输出:
123
123
123
附录:您可以这样做:
var
f1: TextFile;
st: string;
s, s1: TStringList;
begin
AssignFile(f1, '1.txt');
reset(f1);
s := TStringList.Create;
s1 := TStringList.Create;
while not EOF(f1) do
begin
readln(f1, st);
if s.IndexOf(st) < 0 then
s.Add(st)
else
s1.Add(st);
end;
s.SaveToFile('2.txt');
s1.SaveToFile('double.txt');
s.Free;
s1.Free;
CloseFile(f1);
end;
但事实证明,并非所有重复项都保存在double.txt文件中。
也就是说,有几行:
123
123
4444
55555
123
在文件 2.txt 中,结果是
123 - Вот тут запись а она должна быть в файле **double.txt**
4444
55555
在文件double.txt中,结果是
123
123
也就是说,一行123写错了地方。如何解决这个问题?
请告诉我如何实施。从末尾没有数字的所有行中,这是必要的:
Primer123
Primer4454
Primer2
1Primer
2Primer
3Primer
输出结果:
Primer123
Primer4454
Primer2
也许你可以通过 Pos 或 PosEx 做一些事情。或者至少将想法推向哪个方向,在哪里阅读?
有一个视图基础(有重复线的地方):
+Результат
+Ошибка
+Результат
+Результат
+Результат
+Ошибка
......
有必要计算位于文本文件中的所有重复行并在 Memo1 中显示报告。结果应该在 Memo1 中,如下所示:
+Результат - 4 раза
+Ошибка - 2 раза
也就是说,计算文本文件中所有相同的行并在 Memo1 中显示统计信息。
提供的代码运行迅速,但文件大小为 600 兆字节,它会显示内存不足消息。好吧,这是可以理解的,因为我们都加载到内存中。
procedure TForm1.Button1Click(Sender: TObject);
var
TS: TStringList;
s, OneWord: string;
i, Cnt: integer;
begin
TS := TStringList.Create;
TS.Delimiter := '+';
TS.LoadFromFile('baza.txt');
s := TS.Text;
TS.DelimitedText := s;
if TS.Count = 0 then
begin
ShowMessage('Вообще ни одного слова нет!');
Exit;
end;
TS.Sort;
Memo1.Lines.Clear; // подготовим место для формирования отчёта
// собственно подсчёт
OneWord := TS.Strings[0];
Cnt := 1;
for i := 1 to TS.Count - 1 do
if AnsiUpperCase(TS.Strings[i]) = AnsiUpperCase(OneWord) then
inc(Cnt)
else
begin
Memo1.Lines.Append(OneWord + '+' + InttoStr(Cnt));
OneWord := TS.Strings[i];
Cnt := 1;
end;
// для последнего слова в списке вывод результата
Memo1.Lines.Append(OneWord + '+' + InttoStr(Cnt));
FreeAndNil(TS); // освободим память
end;
我试图通过 AssignFile 发布代码 - 逐行阅读,但我在这里有错误。帮忙修?
var
TS: TStringList;
s,st: string;
i, Cnt: integer;
f1: TextFile;
begin
Memo1.Lines.Clear; // подготовим место для формирования отчёта
// Открываем диалог выбора файла
if not OpenDialog1.Execute then
exit
else
AssignFile(f1, OpenDialog1.FileName);
reset(f1);
TS := TStringList.Create;
TS.Delimiter := '+';
s := TS.Text;
TS.DelimitedText := s;
TS.Sort;
if TS.Count = 0 then
begin
ShowMessage('Вообще ни одного слова нет!');
exit;
end;
While not EOF(f1) do
begin
// Что бы программа не подвисала
Application.ProcessMessages();
readln(f1, st);
TS.Add(st);
// собственно подсчёт
st := TS.Strings[0];
Cnt := 1;
for i := 1 to TS.Count - 1 do
if AnsiUpperCase(TS.Strings[i]) = AnsiUpperCase(st) then
inc(Cnt)
else
begin
Memo1.Lines.Append(st + '-' + InttoStr(Cnt));
st := TS.Strings[i];
Cnt := 1;
end;
// для последнего слова в списке вывод результата
Memo1.Lines.Append(st + '-' + InttoStr(Cnt));
FreeAndNil(TS); // освободим память
end;
TS.Free;
CloseFile(f1);
end;
文本文件包含如下行:
>>>
Stroka1
Stroka2
Stroka3
>>>
>>>
Stroka4
Stroka5
Stroka6
Stroka7
>>>
如何将符号>>>之间的线连接成一条线并在它们之间放置一个点。也就是说,结果应该是:
>>>
Stroka1.Stroka2.Stroka3
>>>
>>>
Stroka4.Stroka5.Stroka6.Stroka7
>>>
我阅读了有关该功能的信息(但据我了解,这是通过关键字进行的连接):
result := Concat('Stroka1','Stroka2','Stroka3');
我将来自文本文件的字符串列表加载到 Memo1 中。
Memo1.Lines.LoadFromFile(ExtractFilePath(Application.ExeName)+ 'stroki.txt');
每行的长度最多为 2000 个字符。为什么备忘录会剪切每一行并进行转换,换行。如何完全避免这种情况,以便将每个排水管加载到备忘录中而无需传输。也就是说,已经加载了 10 行,而 memo1 应该有 10 行。
我的尝试:
1. Изменить свойство WordWrap на False.
2. Memo1.Text:=StringReplace(Memo1.Text,#10#13,' ',[rfreplaceall])
3. Изменяла свойства ScrollBars.
没有任何帮助。还是做不到?
实际上问题是:在文本文件中有这样的行:
Delphi1Prolanguage
Delphi2Prolang
Delphi3Proln
Delphi1
Delphi2
Delphi3
如何从此列表中仅删除单词,仅删除整个单词。例如,我需要找到所有有短语Delphi1、Delphi2、Delphi3 的行,但如果只遇到纯单词,则忽略它们。
结果应该是:
Delphi1Prolanguage
Delphi2Prolang
Delphi3Proln
我尝试使用 Pos 来解决这个问题。这是我试图做的。但是通过这种方法,这些和那些行都会进入结果。
代码说明:
Var
Frd1: TextFile // Текстовый файл
RS: String; // Строка
mas1 Array of String; // Массив
Fd: Boolean;
Ну и сам кусочек кода обработки....
while not EoF(Frd1) do
begin
// Читаем строку из файла
ReadLn(Frd1, Rs);
// Ищем вхождение фильтрующей строки в массиве
for i:=Low(mas1) to High(mas1) do
begin
Fd := (Pos(mas1[i], Rs) > 0);
// Записываем строку в файл
if Fd then
WriteLn(Fz1, Rs);
end;
end;
如何删除文本文件中直到最后一个字母的行。
文本文件示例(所有字母均为英文):
1Zadacha123=gotovo555
2Zadachawer=net543
3adacha123=est32
在输出中我们得到:
555
543
32
如何删除某个字母很清楚,如下所示:
删除(s,1,pos('字母',s));
或者
s:=copy(s,1,pos('Буква',s)-1);
添加代码:
uses
Winapi.Windows, Soap.EncdDecd, System.Hash, Winapi.Messages, System.SysUtils,
System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, RegExpr, FileCtrl, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls,
Vcl.Buttons, Vcl.StdCtrls,
Vcl.ExtCtrls, System.IOUtils, System.DateUtils, StrUtils, System.Types,
System.IniFiles, Vcl.ImgList,
System.Math, Vcl.Samples.Spin, ShellApi, System.Generics.Collections,
System.Generics.Defaults,
System.ImageList;
procedure TForm1.Button2Click(Sender: TObject);
Var
sl: TstringList;
i: integer;
Begin
sl := TstringList.Create();
sl.loadFromFile('Загрузить.txt');
for i := 0 to sl.Count - 1 do
begin
sl[i] := TRegExpr.replace(sl[i], '.*?(\d+)$', '$1');
end;
sl.SaveToFile('Сохранить.txt');
End;
它在线上抛出一个错误
sl[i] := TRegExpr.replace(sl[i], '.*?(\d+)$', '$1')
编译时:不兼容的类型: “布尔”和“字符串”
有一个带有行的文本文件:
saa222+file1:12345
dss777+file2:1234
vcd555+file3:123
需要从字符串中提取+字符之前的所有数字并将它们连接到字符串S,结果是:
saa222+file1:12345222
dss777+file2:1234777
vcd555+file3:123555
我在做什么,但到最后却连不上,也就是某处出错,但是在哪呢?
const
numb = ['0' .. '9'];
// работаем по строкам
while not Eof(fall) do
begin
// читаем строку
ReadLn(fall, s1);
// читаем строку
ReadLn(fall, S);
// Обрезаем строку S1 до символа +
s1 := Copy(s1, 1, Pos('+', s1) - 1);
// Удаляем все буквы из строки S1
for b := length(s1) downto 1 do
if not(s1[b] in numb) then
delete(s1, b, 1);
// Склеиваем строки S+S1
S:= S+S1;
writeln(f1, S);
end;
有这样的线条
dsdddfffdfd:dsds1980
dsddd1fff11dfd:ds1ds1987
ds111ddfffdfd:dsdw12s1981
您需要在每行的最后一个字母之后添加单词Test。也就是说,结果应该是:
dsdddfffdfd:dsds**Test**1980
dsddd1fff11dfd:ds1ds**Test**1987
ds111ddfffdfd:dsdw12s**Test**1981
在行尾添加可以理解为:S:= S + 'Test';
但是不知道如何解决这个问题。
Edit1 有数字:
12345
如何为每个数字添加一个零。也就是说,输出应该是:
1020304050
好吧,这是我的例子,但在我看来,这并不完全正确:
Edit1.Text:=StringReplace(Edit1.Text,'0','00',[rfReplaceAll]);
Edit1.Text:=StringReplace(Edit1.Text,'1','10',[rfReplaceAll]);
Edit1.Text:=StringReplace(Edit1.Text,'2','20',[rfReplaceAll]);
Edit1.Text:=StringReplace(Edit1.Text,'3','30',[rfReplaceAll]);
Edit1.Text:=StringReplace(Edit1.Text,'4','40',[rfReplaceAll]);
Edit1.Text:=StringReplace(Edit1.Text,'5','50',[rfReplaceAll]);
Edit1.Text:=StringReplace(Edit1.Text,'6','60',[rfReplaceAll]);
Edit1.Text:=StringReplace(Edit1.Text,'7','70',[rfReplaceAll]);
Edit1.Text:=StringReplace(Edit1.Text,'8','80',[rfReplaceAll]);
Edit1.Text:=StringReplace(Edit1.Text,'9','90',[rfReplaceAll]);
有这样的行Memo1.Text
:
способ - 8 повторов
протащить - 2 повторов
год - 14 повторов
принять - 3 повторов
и - 15 повторов
如何按第一个单词,按单词长度对行进行排序 - 从最大到最小,即在输出处获得结果:
протащить - 2 повторов
принять - 3 повторов
способ - 8 повторов
год - 14 повторов
и - 15 повторов
我将文本从Memo2 ( Memo2 的第一行)复制到设置鼠标光标的Memo1 中。
Memo1.SetFocus;
Memo1.SetSelTextBuf(PWideChar(Memo2.Lines[0]));
有一个问题: 如何取消最后一个动作?也就是说,点击按钮后,最后一个动作应该被取消。
尝试通过(但这只是取消手动操作并且不起作用):
Memo1.Undo;
Memo1 中有文本。文本打印在一行中。文本示例:
Все люди любят мечтать. Особенно в детстве. И это очень хорошо. История заветной детской мечты. ставшей явью. Далее в обзоре.
如何将文本分成每行三个句子并在它们之间放置一个段落?这样 Memo1.Text 中的输出将是结果:
Все люди любят мечтать. Особенно в детстве. И это очень хорошо.
История заветной детской мечты. ставшей явью. Далее в обзоре.
到目前为止,我已经想出了如何将它分成单独的句子。它会是这样的:
var i:integer;
s:string;
begin
s:=Memo1.Text;
i:=2;
while i<length(s) do
if(s[i]=' ')and(s[i-1] in ['.'])then
begin
insert(#13#10,s,i+1);
i:=i+1;
end
else i:=i+1;
Memo1.Text:=s
end;
文本文件 Text.txt 位于站点上,其中包含以下文本:
Год:2020
Число:19
Месяц:09
我提出这样的要求:
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Add(IdHTTP1.Get('http://test.ru/text.txt'));
end;
问题是,在备忘录中,我将文本放在一行中:
Год:2020Число:19Месяц:09
并且在备忘录中的列中应该有文本,就像在文本文件中一样。我究竟做错了什么?
备忘录分为三行:
11
22
33
通过单击按钮,我删除了备忘录的第一行:
Memo1.Lines.delete(0);
如何使ProgressBar在从Memo中删除的行中填充(即ProgressBar的第一行已被删除,第二,第三...)?
错误代码是这样的:
Error connecting with SSL.
error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure.
无论使用什么类型的 sslvSSLv2、sslvSSLv23、sslvSSLv3、sslvTLSv1,我仍然会出错!
我这样做:
Var
SSL: TIdSSLIOHandlerSocketOpenSSL;
HTTP: TIdHttp;
begin
SSL:=TIdSSLIOHandlerSocketOpenSSL.Create(Application);
SSL.ReadTimeOut:=10000;
///sslvSSLv2, sslvSSLv23, sslvSSLv3, sslvTLSv1
SSL.SSLOptions.Method:=sslvSSLv23;
SSL.SSLOptions.Mode:=sslmUnassigned;
HTTP:=TidHTTP.Create(Application);
HTTP.ReadTimeout:=10000;
HTTP.IOHandler:=SSL;
HTTP.AllowCookies:=true;
HTTP.Request.UserAgent :='Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.54 Safari/537.36 OPR/36.0.2130.21 (Edition beta)'; //'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36';
try
memo1.lines.text:=HTTP.Get('https://zachestnyibiznes.ru/');
finally
SSL.Free;
HTTP.Free;
end;
end;
使用相同的代码:例如,我得到页面代码https://www.e1.ru/没有任何问题。
在哪里挖掘,可能有什么问题?
**Версия Indy:** 10.6.2.5341
**Версия RAD:** RAD Studio 10.1 Berlin Version 24.0.25048.9432
在表单上有一个按钮 Button1Click 和 Edit1.Text 以及一个文本文件1.txt,其中有几行: 例如:
1234567
98765432
3232323
434343434
需要在Edit中点击按钮时,出现第一行1234567 的值,按下按钮,第二行98765432的值也会出现,以此类推。但是什么是有序的。