问题列表 - 第26693页

Delphi:使用Reset/ReadLn替代文本文件读取

我想逐行处理文本文件.在以前我把文件加载到StringList:

slFile := TStringList.Create();
slFile.LoadFromFile(filename);

for i := 0 to slFile.Count-1 do
begin
   oneLine := slFile.Strings[i];
   //process the line
end;
Run Code Online (Sandbox Code Playgroud)

这一问题是一旦文件到达是一个几百兆,我不得不分配一个巨大的内存块; 当我真的只需要足够的内存来保持一行一行时.(另外,当系统在步骤1中锁定加载文件时,您无法真正指示进度).

我尝试使用Delphi提供的本机和推荐的文件I/O例程:

var
   f: TextFile;
begin
   Reset(f, filename);
   while ReadLn(f, oneLine) do
   begin
       //process the line
   end;
Run Code Online (Sandbox Code Playgroud)

问题Assign是没有锁定(即fmShareDenyNone)没有选项来读取文件.前一个stringlist示例也不支持no-lock,除非您将其更改为LoadFromStream:

slFile := TStringList.Create;
stream := TFileStream.Create(filename, fmOpenRead or fmShareDenyNone);
   slFile.LoadFromStream(stream);
stream.Free;

for i := 0 to slFile.Count-1 do
begin
   oneLine := slFile.Strings[i];
   //process the line
end;
Run Code Online (Sandbox Code Playgroud)

所以现在即使我没有获得锁定,我又回到将整个文件加载到内存中.

有什么替代Assign …

delphi readline text-files

12
推荐指数
1
解决办法
2万
查看次数

你能在Ruby中定义<=>然后自动定义==,>,<,> =和<=吗?

这是我Note班级的一部分:

class Note
  attr_accessor :semitones, :letter, :accidental

  def initialize(semitones, letter, accidental = :n)
    @semitones, @letter, @accidental = semitones, letter, accidental
  end

  def <=>(other)
    @semitones <=> other.semitones
  end

  def ==(other)
    @semitones == other.semitones
  end

  def >(other)
    @semitones > other.semitones
  end

  def <(other)
    @semitones < other.semitones
  end
end
Run Code Online (Sandbox Code Playgroud)

在我看来,应该有一个我可以包含的模块,可以根据我的<=>方法给我我的相等和比较运算符.有吗?

我猜很多人遇到这种问题.你通常如何解决它?(你怎么让它干?)

ruby mixins spacecraft-operator

9
推荐指数
1
解决办法
199
查看次数

如何在fastCGI进程之间共享数据?

我编写了一个简单的perl脚本,我在Apache上通过fastCGI运行.应用程序加载一组XML数据文件,这些文件用于根据传入请求的查询参数查找值.据我了解,如果我想增加应用程序可以处理的并发请求量,我需要允许fastCGI生成多个进程.这些进程中的每一个都必须在内存中保存XML数据的重复副本吗?有没有办法设置,以便我可以在内存中加载一份XML数据,同时增加处理并发请求的能力?

fastcgi apache2 mod-fastcgi

3
推荐指数
2
解决办法
854
查看次数

滚动时UIScrollview调用superviews layoutSubviews?

我将UITableView作为子视图添加到我正在处理的自定义UIView类中.但是我注意到每当我滚动表时它都会调用我的类layoutSubviews.我很确定UIScrollview表是继承的,实际上是在做这个,但想知道是否有办法禁用这个功能,如果不是为什么会发生?我不明白为什么当你滚动一个scrollview时,它需要超级视图来布局它的子视图.

码:

@implementation CustomView
- (id)initWithFrame:(CGRect)frame {
    if ((self = [super initWithFrame:frame])) {
        self.clipsToBounds = YES;

        UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectMake(0.0, 15.0, 436.0, 132.0) style:UITableViewStylePlain];
        tableView.dataSource = self;
        tableView.delegate = self;
        tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
        tableView.backgroundColor = [UIColor clearColor];
        tableView.showsVerticalScrollIndicator = NO;
        tableView.contentInset = UIEdgeInsetsMake(kRowHeight, 0.0, kRowHeight, 0.0);
        tableView.tag = componentIndex;

        [self addSubview:tableView];
        [tableView release];
    }
    return self;
}
- (void)layoutSubviews {
    // This is called everytime I scroll the tableview
}

@end
Run Code Online (Sandbox Code Playgroud)

iphone uitableview uiscrollview uiview

12
推荐指数
1
解决办法
5315
查看次数

C++套接字并发服务器

我正在编写一个应该具有通信通道和数据通道的并发服务器.

客户端最初连接到通信通道以进行身份​​验证,成功进行身份验证后,客户端将连接到数据通道以访问数据.

我的程序已经在做了,我正在使用线程.我唯一的问题是,如果我尝试连接另一个客户端,我会得到一个"无法绑定:已在使用的地址"错误.

我有这样的方式:

A部分

客户端连接到端口4567(并输入其登录信息).生成一个线程来处理客户端(为每个连接的客户端重复).在创建的线程中,我有一个函数(让我们称之为FUNC_A)检查客户端的登录信息(不用担心检查是如何完成的),如果成功,则线程启动数据服务器(监听8976),然后向客户端发送OK,一旦收到客户端尝试连接到数据服务器.

B部分

一旦客户端连接到数据服务器,从FUNC_A内部接受客户端,并生成另一个线程来处理客户端与数据服务器的连接(希望一切都清楚).现在,一切正常.但是,如果我尝试连接到第二个客户端,当它到达PART BI时会收到"无法绑定错误:地址已在使用中".我尝试了很多不同的方法,我甚至尝试生成一个线程来启动数据服务器并接受客户端,然后启动另一个线程来处理该连接.仍然没有运气.

请给我一个关于我做错了什么的建议,我该如何做到这一点或者实现它的最佳方式是什么.谢谢

c++ sockets concurrency

5
推荐指数
1
解决办法
1859
查看次数

仅使用距离和方位查找位置?

通过检查三个KNOWN目标的角度来进行三角测量.

"我知道那是亚历山大的灯塔,它位于地图上(X,Y),它位于我90度的右侧." 对不同的目标和角度重复2次.

通过检查距离三个已知目标的距离来进行三边测量.

"我知道那是亚历山大的灯塔,它位于地图上(X,Y),我距离那里100米." 对不同的目标和范围重复2次.

但这两种方法都依赖于知道你在看什么.

假设你在森林里,你无法区分树木,但你知道关键树木的位置.这些树被手工挑选为"地标".

你有一个机器人慢慢穿过那片森林.

您是否了解任何基于角度和范围确定位置的方法,利用地标之间的几何图形?请注意,您也会看到其他树,因此您不会知道哪些树是关键树.忽略目标可能被遮挡的事实.我们的预算法可以解决这个问题.

1)如果存在,它叫什么?我找不到任何东西.

2)你认为两次相同的位置命中的几率是多少?我想这是相当罕见的.

3)如果有两个相同的位置'命中',我怎样才能确定我下次移动机器人后的确切位置.(我假设在重新定位机器人之后连续出现2次精确角度的可能性在统计上是不可能的,除非森林像玉米一样生长).我会再次计算一下这个位置并希望最好吗?或者我会以某种方式将我以前的位置估计纳入我的下一个猜测?

如果存在,我想阅读它,如果没有,将其作为一个侧面项目开发.我现在没有时间重新发明轮子,也没有时间从头开始实施.因此,如果它不存在,我将不得不找出另一种本地化机器人的方法,因为这不是本研究的目的,如果确实如此,让我们希望它是半容易的.

c++ java language-agnostic matlab robotics

11
推荐指数
2
解决办法
1616
查看次数

使用lambda更改for循环(C#3.0)

是否可以使用Lambda进行相同的操作

for (int i = 0; i < objEntityCode.Count; i++)
{
    options.Attributes[i] = new EntityCodeKey();
    options.Attributes[i].EntityCode = objEntityCode[i].EntityCodes;
    options.Attributes[i].OrganizationCode = Constants.ORGANIZATION_CODE;
}
Run Code Online (Sandbox Code Playgroud)

我的意思是说使用lambda重写语句.我试过了

Enumerable.Range(0,objEntityCode.Count-1).Foreach(i=> { 
    options.Attributes[i] = new EntityCodeKey(); 
    options.Attributes[i].EntityCode = objEntityCode[i].EntityCodes; 
    options.Attributes[i].OrganizationCode = Constants.ORGANIZATION_CODE; }
);
Run Code Online (Sandbox Code Playgroud)

但不工作我正在使用C#3.0

c#-3.0

1
推荐指数
1
解决办法
223
查看次数

如何在正则表达式中替换"("和"\(",Emacs/elisp风味?

问题为标题.

更具体地说,\(每次我想在Emacs(交互式)regexp函数中使用括号(更不用说\\(代码中)时,我都厌倦了必须输入等等.所以我写了类似的东西

(defadvice query-replace-regexp (before my-query-replace-regexp activate)
   (ad-set-arg 0 (replace-regexp-in-string "(" "\\\\(" (ad-get-arg 0)))
   (ad-set-arg 0 (replace-regexp-in-string ")" "\\\\)" (ad-get-arg 0)))))
Run Code Online (Sandbox Code Playgroud)

希望在"交互模式"期间我可以方便地忘记emage在regexp中的特性.除了我不能正确的regexp ...

(replace-regexp-in-string "(" "\\\\(" "(abc")
Run Code Online (Sandbox Code Playgroud)

给出\\(abc的,而不是想要的\(abc.斜杠数量的其他变化只会产生错误.思考?

自从我开始提问以来,不妨问另一个:由于lisp代码不应该使用交互功能,建议query-replace-regexp应该没问题,我是否正确?

emacs elisp

2
推荐指数
1
解决办法
1829
查看次数

Boost Graph 中的最长路径

抱歉,如果这对你们中的一些人来说是一个非常基本的问题,但我是 C++ 新手(更不用说 Boost Graph Library)并且无法解决这个问题。到目前为止,我已经能够使用下面的代码制定/收集代码来创建图表。

现在我正在尝试找出找到该图中最长路径的代码。

有人可以帮忙看看代码是什么吗?在尝试查找路径时,我无法弄清楚是否/如何遍历每个节点和/或边缘?

我必须尝试返回最长路径中的所有节点和边。

任何帮助将不胜感激。

PS 有谁知道 C++ 是否有像 Javadoc 那样组织文档?

    #include <boost/graph/dag_shortest_paths.hpp>
#include <boost/graph/adjacency_list.hpp>
#include <windows.h>
#include <iostream>



int main()
{
  using namespace boost;
  typedef adjacency_list<vecS, vecS, directedS, property<vertex_distance_t, double>, property<edge_weight_t, double> > graph_t;
  graph_t g(6);
  enum verts { stationA, stationB, stationC, stationD, stationE, stationF };
  char name[] = "rstuvx";


  add_edge(stationA, stationB, 5000.23, g);
  add_edge(stationA, stationC, 3001, g);
  add_edge(stationA, stationD, 2098.67, g);
  add_edge(stationA, stationE, 3298.84, g);
  add_edge(stationB, stationF, 2145, g);
  add_edge(stationC, stationF, 4290, g); …
Run Code Online (Sandbox Code Playgroud)

boost graph

5
推荐指数
1
解决办法
2469
查看次数

在c ++中在循环中创建新变量时更好

C++ std::map在循环中使用的最佳方法是什么?

  • 动态分配
  • 堆栈已分配

码:

for(int i=0;i<3;i++)
{
  std::map<int,int>* m = new std::map<int,int>;
  //or ...
  std::map<int,int> m;

}
Run Code Online (Sandbox Code Playgroud)

c++ programming-languages

3
推荐指数
2
解决办法
206
查看次数