有没有人有一个更复杂的解决方案/库来缩短JavaScript的字符串,而不是显而易见的:
if(string.length > 25) {
string = string.substring(0,24) + "...";
}
Run Code Online (Sandbox Code Playgroud) 根据这个论坛的讨论,SQL Server(我使用2005但我收集这个也适用于2000和2008)默认将varchar你指定的任何s指定为varchar的长度,即使直接插入该字符串也是如此.INSERT实际上会导致错误.例如.如果我创建此表:
CREATE TABLE testTable(
[testStringField] [nvarchar](5) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
然后当我执行以下内容时:
INSERT INTO testTable(testStringField) VALUES(N'string which is too long')
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
String or binary data would be truncated.
The statement has been terminated.
Run Code Online (Sandbox Code Playgroud)
大.保留了数据完整性,并且调用者知道它.现在让我们定义一个存储过程来插入:
CREATE PROCEDURE spTestTableInsert
@testStringField [nvarchar](5)
AS
INSERT INTO testTable(testStringField) VALUES(@testStringField)
GO
Run Code Online (Sandbox Code Playgroud)
并执行它:
EXEC spTestTableInsert @testStringField = N'string which is too long'
Run Code Online (Sandbox Code Playgroud)
没有错误,1排受影响.将一行插入表中,testStringField格式为'strin'.SQL Server以静默方式截断存储过程的varchar参数.
现在,这种行为有时可能很方便,但我认为没有办法把它关掉.这非常烦人,因为如果我将一个字符串传递给存储过程,我希望错误.似乎有两种方法可以解决这个问题.
首先,将存储过程的@testStringField参数声明为大小为6,并检查其长度是否超过5.这看起来像是一个黑客攻击并涉及大量的样板代码.
其次,只需声明所有存储过程varchar参数varchar(max),然后让INSERT存储过程中的语句失败.
后者似乎工作正常,所以我的问题是:varchar(max)在SQL …
在SQL Server 2005中,我试图查询varchar(MAX)列,其中包含一些文本数据超过8192的行.但是,在管理工作室中,我有工具 - >选项 - >查询结果 - >结果到文本 - >每列中显示的最大字符数= 8192,这是最大值.因此,看起来这些行的截断仅仅是由于文本输出所施加的限制.
我唯一能看到的就是使用SUBSTRING函数来获取前8000个字符,然后是接下来的8000个字符等等.但这很丑陋且容易出错.
我应该提一下,SSIS和BCP不是我的选择.
有人有更好的建议吗?谢谢!
我需要"..."在可调整大小的元素中的文本中间实现省略号().这可能是它的样子.所以,
"Lorem ipsum dolor sit amet. Ut ornare dignissim ligula sed commodo."
Run Code Online (Sandbox Code Playgroud)
变
"Lorem ipsum dolor sit amet ... commodo."
Run Code Online (Sandbox Code Playgroud)
当元素伸展到文本的宽度时,我希望省略号消失.如何才能做到这一点?
您将如何删除x个字符之后的所有内容?例如,删除 15 个字符之后的所有内容并添加...到其中。
This is an example sentence应该变成This is an exam...
我正在使用getTraceAsString()堆栈跟踪但由于某种原因字符串被截断.
例如,抛出异常并使用以下命令记录字符串:
catch (SoapFault $e) {
error_log( $e->getTraceAsString() )
}
Run Code Online (Sandbox Code Playgroud)
打印出来的字符串是:
#0 C:\ Somedirectory\Somedirectory\Somedirectory\Somedir\SomeScript.php(10):SoapClient-> SoapClient的( ' HTTP://www.ex ...')
如何打印完整的字符串?
我有一些动态文本包含在div中,该div设置为用户在文本框字段中输入的内容.如果文本不适合div,那么它现在只是在边缘切断,并且所有超出边框的文本都不可见.我想截断文本,使其适合框内,并在末尾附加省略号(...).例如:
|----div width------|
Here is some sample text that is too long.
Here is some sam...
Run Code Online (Sandbox Code Playgroud)
显然在示例中它很容易,因为代码标签使用固定宽度的字体,因此它就像计算字符一样简单.我有一个可变宽度的字体,所以如果他们输入"WWWWWWWWWWW",它将填充比"................"更少的字符.
最好的方法是什么?我发现了一个潜在的解决方案,可以在这里简单地找到文本的实际像素宽度:http://www.codingforums.com/archive/index.php/t-100367.html
但即使使用这样的方法,实现省略号也有点尴尬.因此,如果它是20个字符并且我发现它不适合,我将不得不截断为19,添加省略号,然后检查它是否再次适合.然后截断为18(加上省略号)并再试一次.然后再次.再次......直到它适合.有没有更好的办法?
编辑:我已经根据答案确定了我的原始方法是最好的,除了我试图通过不创建一个单独的td元素简单地用于测量来改进上述链接中的解决方案,这感觉就像一个黑客.
这是我的代码:
<div id="tab" class="tab">
<div id="tabTitle" class="tabTitle">
<div class="line1">user-supplied text will be put here</div>
<div class="line2">more user-supplied text will be put here</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
和风格:
.tab {
padding: 10px 5px 0px 10px;
margin-right: 1px;
float: left;
width: 136px;
height: 49px;
background-image: url(../images/example.gif);
background-position: left top;
background-repeat: no-repeat;
}
.tab .tabTitle {
height: 30px;
width: 122px;
overflow: hidden; …Run Code Online (Sandbox Code Playgroud) 鉴于以下内容:
SELECT ISNULL('XY' + NULL, 'ABCDEFGHIJ') -- Outputs ABC (Why?)
SELECT COALESCE('XY' + NULL, 'ABCDEFGHIJ') -- Outputs ABCDEFGHIJ
Run Code Online (Sandbox Code Playgroud)
为什么这些陈述会返回不同的结果?
我的程序执行将二进制数据写入文件的常见任务,符合某种非文本文件格式.由于我正在编写的数据不是已经在现有的块中,而是在运行时逐字节放在一起,我使用std::ostream::put()而不是write().我认为这是正常的程序.
该程序工作得很好.它使用两个std::stringstream::put()和std::ofstream::put()两位十六进制整数作为参数.但是只要参数to put()大于0x7f,我就会得到编译器警告C4309:"截断常量值"(在VC++ 2010中).显然编译器期望a signed char,并且常量超出范围.但我认为任何截断都不会发生; 字节的写入就像它应该的那样.
编译器警告让我觉得我没有以正常,可接受的方式做事.我描述的情况必须是一个普遍的情况.是否有通用的方法来避免这样的编译器警告?或者这是一个无意义的编译器警告的例子,应该被忽略?
我想到了避免它的两种不公平的方法.我可以mystream.put( char(0xa4) )在每次调用时都使用语法.或者不是使用std::stringstream我可以使用std::basic_stringstream< unsigned char >,但我不认为这个技巧可以使用std::ofstream,这不是模板类型.我觉得这里应该有一个更好的解决方案,特别是因为ofstream它用于编写二进制文件.
你的意见?
- 编辑 -
啊,我错误地认为它std::ofstream不是一个模板化的类型.实际上std::basic_ofstream<char>,但我尝试了这种方法并且意识到它无论如何都不会因缺乏定义的方法和多态不兼容而起作用std::ostream.
这是一个代码示例:
stringstream ss;
int a, b;
/* Do stuff */
ss.put( 0 );
ss.put( 0x90 | a ); // oddly, no warning here...
ss.put( b ); // ...or here
ss.put( 0xa4 ); // …Run Code Online (Sandbox Code Playgroud) 我想给我的应用程序一个App Store名称和设备上显示的一个名称,因为设备名称太长会被设备上的"..."截断而不是商店.这可能吗?
提前致谢!