在不使用更多内存的情况下循环遍历多行字符串的每一行的好方法是什么(例如,不将其拆分为数组)?
我有一个包含大量文件的文件夹,其中一些文件具有完全相同的内容.我想删除包含重复内容的文件,这意味着如果找到两个或多个重复内容的文件,我想留下其中一个文件,并删除其他文件.
以下是我想出来的,但我不知道它是否有效:),还没试过.
你会怎么做?Perl或一般算法.
use strict;
use warnings;
my @files = <"./files/*.txt">;
my $current = 0;
while( $current <= $#files ) {
# read contents of $files[$current] into $contents1 scalar
my $compareTo = $current + 1;
while( $compareTo <= $#files ) {
# read contents of $files[compareTo] into $contents2 scalar
if( $contents1 eq $contents2 ) {
splice(@files, $compareTo, 1);
# delete $files[compareTo] here
}
else {
$compareTo++;
}
}
$current++;
}
Run Code Online (Sandbox Code Playgroud) 我在表单中添加了一些控件并更改了Anchor属性我希望它如何工作,但是当我在运行时调整表单大小时,控件保持在同一个位置.
例如,我在表单的右下角有两个按钮 - 它们在表单上,没有容器或类似的东西.Anchor = Bottom,Right.FormBorderStyle =大小.但是当我在运行时拖动调整窗体大小时,按钮不会移动.
我错过了什么吗?
c#2005
如何在C#中的BindingList中移动项目?比如说,将最后添加的项目移到前面,或者与之前的项目交换?
我使用以下代码拖动无边框表单,方法是单击并拖动表单本身.它可以工作,但它不适用于单击并拖动窗体上的控件.我需要能够在单击某些控件时拖动它而不是其他控件 - 按标签拖动,但不要通过按钮和文本框拖动.我该怎么做?
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
const int WM_NCHITTEST = 0x84;
const int HTCLIENT = 0x1;
const int HTCAPTION = 0x2;
if (m.Msg == WM_NCHITTEST && (int)m.Result == HTCLIENT)
m.Result = (IntPtr)HTCAPTION;
}
Run Code Online (Sandbox Code Playgroud) 这是一个C#桌面应用程序.DrawStyle
我的属性ListBox
设置为OwnerDrawFixed
.
问题:我重写DrawItem以不同的字体绘制文本,它的工作原理.但是当我在运行时开始调整表单大小时,正确绘制了所选项目,但其余部分未重绘,导致文本看起来已损坏未选中的项目.
这是我的代码:
private void listDevices_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();
string textDevice = ((ListBox)sender).Items[e.Index].ToString();
e.Graphics.DrawString(textDevice,
new Font("Ariel", 15, FontStyle.Bold), new SolidBrush(Color.Black),
e.Bounds, StringFormat.GenericDefault);
// Figure out where to draw IP
StringFormat copy = new StringFormat(
StringFormatFlags.NoWrap |
StringFormatFlags.MeasureTrailingSpaces
);
copy.SetMeasurableCharacterRanges(new CharacterRange[] {new CharacterRange(0, textDevice.Length)});
Region[] regions = e.Graphics.MeasureCharacterRanges(
textDevice, new Font("Ariel", 15, FontStyle.Bold), e.Bounds, copy);
int width = (int)(regions[0].GetBounds(e.Graphics).Width);
Rectangle rect = e.Bounds;
rect.X += width;
rect.Width -= width;
// draw IP …
Run Code Online (Sandbox Code Playgroud) 我有一个Mojolicious Lite脚本,"发出"一个可执行文件(用户可以从脚本的URL下载该文件).我将编码数据保存在DATA部分的内联模板中,然后对其进行编码和render_data.
get '/download' => sub {
my $self = shift;
my $hex_data = $self->render_partial( 'TestEXE' );
my $bin_data;
while( $hex_data =~ /([^\n]+)\n?/g ) {
$bin_data .= pack "H".(length $1), $1;
}
my $headers = Mojo::Headers->new;
$headers->add( 'Content-Type', 'application/x-download;name=Test.exe' );
$headers->add( 'Content-Disposition', 'attachment;filename=Test.exe' );
$headers->add( 'Content-Description', 'File Transfer');
$self->res->content->headers($headers);
$self->render_data( $bin_data );
};
__DATA__
@@ TestEXE.html.ep
4d5a90000300000004000000ffff0000b8000000000000004000000000000000
00000000000000000000000000000000000000000000000000000000b0000000
0e1fba0e00b409cd21b8014ccd21546836362070726f6772616d2063616e6e6f
....
Run Code Online (Sandbox Code Playgroud)
当我在本地运行时(通过内置的Web服务器http://127.0.0.1:3000/,Win7),我得到了正确的文件(大小和内容).但是当我在共享主机(Linux)上以CGI模式运行它时,它返回正确的大小,但文件的前8个字节总是不正确(并且总是不同).文件的其余部分是正确的.
如果在我的sub中我指定$hex_data
而不是$bin_data
我得到的东西在那里.
我迷路了.
我正在尝试使用cookie,LWP::UserAgent
但它们没有保存在文本文件中.我究竟做错了什么?
use v5.16;
use strict;
use warnings;
use Data::Dumper;
use LWP::UserAgent;
use HTTP::Cookies;
use Net::SSL ();
my $cookie_jar = HTTP::Cookies->new(
file => 'lwp_cookies.txt',
autosave => 1,
);
my $ua = LWP::UserAgent->new(
ssl_opts => { verify_hostname => 0 },
cookie_jar => $cookie_jar,
);
my $auth_url = 'https://my.site.url/path/authenticate';
use HTTP::Request::Common qw(GET);
my $req = HTTP::Request->new(GET => $auth_url);
$req->authorization_basic('username', 'password');
$ua->request($req);
say Dumper( \$cookie_jar );
Run Code Online (Sandbox Code Playgroud)
转储的数据如下所示:
$VAR1 = \bless( {
'autosave' => 1,
'COOKIES' => {
'my.site.url' => {
'/' => …
Run Code Online (Sandbox Code Playgroud) 我安装了最新的 Docker CS,从 Docker Hub获得了一个LAMP 镜像。我正在尝试在其中创建一个数据库并使用保存在其中的数据库制作新图像。
docker run --name mycontainer fauria/lamp
这将启动基于 Ubuntu 的容器并启动 Apache 服务器。MySQL 服务器也在容器中运行。docker exec -i -t mycontainer bash
mysql -u root
CREATE DATABASE mydbname;
USE mydbname;
CREATE FUNCTION ...
...docker stop mycontainer
docker commit
docker ps -l -qmynickname/appname:v1
docker container rm mycontainer
现在我预计如果我基于新图像运行容器,我已经在那里有了数据库。但它不在那里。
docker run --name mycontainer --rm -p 80:80 -e LOG_STDOUT=true -e LOG_STDERR=true -e LOG_LEVEL=debug -v /home/username/dev/appname/www:/var/www/html mynickname/appname:v1
我错过了什么?
当我事先不知道会有多少数据进入时,如何从流中读取?现在我只选了一个偏高的数字(如下面的代码所示),但不能保证我不会得到更多.
所以我在循环中一次读取一个字节,每次调整数组大小?听起来太大了调整: - /
TcpClient tcpclnt = new TcpClient();
tcpclnt.Connect(ip, port);
Stream stm = tcpclnt.GetStream();
stm.Write(cmdBuffer, 0, cmdBuffer.Length);
byte[] response = new Byte[2048];
int read = stm.Read(response, 0, 2048);
tcpclnt.Close();
Run Code Online (Sandbox Code Playgroud)