如何知道在多个定界符上给字符串定界时使用的是哪个定界符?(C#)
我从文件中读取字符串,它们具有多种样式: item0 item1 item2 item0,item1,item2 item0_item1_item2 我这样拆分它们: string[] split_line = line[i].split(new char[] {' ',',','_'}); i更改项目(列),然后使用字符串构建器将字符串拼接在一起. 但是现在,将字符串放回后,我必须使用正确的定界符. 分开字符串时是否可以知道使用哪个定界符? 更新 呼叫者将传递我的第一个项目,以便我只更改该行. 解决方案 除非您继续跟踪分裂动作(当时是一个),否则您没有. 否则,您可以创建一个正则表达式,以捕获项目和定界符并从那里走. 其他解决方案 而不是传递一系列字符,您可以使用正则表达式来拆分字符串.这样做的优点是您可以捕获分裂字符. REGEX.SPLIT将插入数组中元素之间的任何捕获: string[] space = Regex.Spli
0 2024-04-16
编程技术问答社区
CSVHelper不能解析我的Tab分隔的CSV文件
我试图读取一个选项卡划界的CSV文件,并用CSVHelper进行解析. 我有以下内容: _reader = new StreamReader(_stream); _csvReader = new CsvReader(_reader); _csvReader.Configuration.Delimiter = "\t"; 但是读者无法正确识别和解析文件 有什么想法吗? CSVHelper的可能分隔器是什么? 解决方案 因此,出于某种原因,事实证明它起作用当我执行以下操作时: _reader = new StreamReader(_stream); CsvHelper.Configuration.Configuration myConfig = new CsvHelper.Configuration.Configuration(); _csvReader.Configuration.Delimiter = "\t"; _c
0 2024-04-15
编程技术问答社区
在C#中,将一个划线的字符串转换为一个字典<string,string>。
我有一串格式 " key1 = value1; key2 = value2; key3 = value3;" 我需要将其转换为上述键值对的字典. 最好的方法是什么? 谢谢. 解决方案 类似的东西? var dict = text.Split(new[] {';'}, StringSplitOptions.RemoveEmptyEntries) .Select(part => part.Split('=')) .ToDictionary(split => split[0], split => split[1]); 当然,如果未达到假设,这将失败.例如,如果文本不以正确的格式,则可以抛出IndexOutOfRangeException,如果有重复的键,将抛出ArgumentException.这些场景中的每一个都需要不同的修改.如果可能存在冗余的白色空间,则可能需要一些string.Trim必要的调用.
0 2024-04-14
编程技术问答社区
用/斜线分割数组
在我的一系列阵列中,我得到的: "/mercedes-benz/190-class/1993/" class="canonicalLink" data-qstring="?sub=sedan">1993 我希望在每个'/'之后拆分文本并在string[]中获得,这是我的努力: Queue see = new Queue(); //char[] a = {'\n '}; List car_fact_list = new List(); string[] car_detail; foreach (string s in car) { MatchCollection match = Regex.Matches(s, @"", RegexOptio
0 2024-04-12
编程技术问答社区
C# List<string> to string with delimiter
C#中是否有一个函数可以快速将某些集合转换为字符串,并使用定界符分开值? 例如: List names - > string names_together = "John, Anna, Monica" 解决方案 您可以使用 String.Join .如果您有List,则可以致电 ToArray : List names = new List() { "John", "Anna", "Monica" }; var result = String.Join(", ", names.ToArray()); 在.net 4中,您不再需要ToArray,因为String.Join的超载IEnumerable IEnumerable. 在新版本的.NET中,不同的String.Join过载使用不同的方法来产生结果.这可能会影响您的代码的性能. 例如,那些接受IEn
4 2024-04-10
编程技术问答社区
在C语言中使用多个定界符拆分字符串
我目前正在尝试拆分从文本文件中读取的一系列字符.现在,我与定界符有麻烦,我不知道我是否可以有多个.我想界定的是逗号和空间.这是我到目前为止的代码. #include FILE * fPointer; fPointer = fopen("file name", "r"); char singleLine[1500]; char delimit[] = int i = 0; int j = 0; int k = 0; while(!feof(fPointer)){ //the i counter is for the first line in the text file which I want to skip while ((fgets(singleLine, 1500, fPointer) != NULL) && !(i == 0)){ //delimit in this loop puts(single
2 2024-04-10
编程技术问答社区
不能连接strtok'的输出变量。 strcat和strtok
我已经花了几个小时的时间来在线搜索我方法的替代方案,并且整个晚上都困扰着崩溃和错误…… 我有几件事想实现此代码.首先,我将解释我的问题,然后发布代码,最后我解释我对程序的需求. 程序仅输出单个单词,而连接函数无济于事.这似乎应该很简单就可以修复... 我的第一个问题是我似乎无法使连接函数起作用,我使用的是通用的strcat函数,该功能不起作用,我在Internet上发现的另一个版本也没有(此处使用了,在此使用,它被称为" mystrcat").我想将程序读取在字符串中,然后删除"定界符",以创建一个由原始字符串中每个单词组成的单个字符串.我正在尝试使用strtok和strcat函数.如果有一种更简单或更简单的方法,请全都. 另一个问题,这不一定是一个问题,而是一个丑陋的混乱:主要的七行.我希望初始化我的变量如下:char变量[amt];但是我为Strtok找到的代码使用了指针,而Strcat函数的代码使用指针.对指针的更好理解&&地址的字符串可能会帮助我长期离开.
2 2024-04-09
编程技术问答社区
提取两个分隔符之间的数据
我只想知道是否有可能在两个定界符之间拾取存在的数据(定界符是字符串). 例如,原始字符串如下 %20Conference%20successfully%20modified%200117246%20%20%20 我想要标签之间存在的数据.我需要数据的字符串可能不同.字符串也可以像这样 %20Conference%20deleted0116976%20%20%20Number%20of%20conferences%20deleted
2 2024-04-09
编程技术问答社区
有什么方法可以在C语言中计算令牌吗?
我正在使用strtok将字符串拆分为令牌.有人知道任何实际上计数令牌数量的功能吗? 我有一个命令字符串,我需要将其拆分并将参数传递给execve(). 谢谢! 编辑 execve以char**为例,我需要分配一系列指针.我不知道不知道有多少个令牌可以分配多少. 解决方案 一种方法是简单地将strtok与计数器一起使用.但是,这将修改原始字符串. 另一种方法是在循环中使用strchr,例如: int count = 0; char *ptr = s; while((ptr = strchr(ptr, ' ')) != NULL) { count++; ptr++; } 如果您有多个定界符,请使用strpbrk: while((ptr = strpbrk(ptr, " \t")) != NULL) ... 其他解决方案 作为令牌的数量,只不过是所使用的定界符出现的频率.因此,您的问题归结为找不到.字符串中字符的发生时
0 2024-04-08
编程技术问答社区
strtok()在C++中的类似物
我只是找不到算法将字符串分为众多定界符的单词.我知道如何用istringtream划分弦,然后用单定界符用getline拆分字符串.我该如何连接它们. 例如: 输入:This -is-a!,string; 输出: This is a string 解决方案 #include #include #include using namespace std; void SplitToVector(vector &v, string dlm, string src){ string::size_type p, start=0, len=src.length(); v.clear(); start = src.find_first_not_of(dlm); p = src.find_first_of(dlm, start); while(p
0 2024-04-07
编程技术问答社区
strtok()问题。如果令牌由分隔符分隔,为什么最后一个令牌在分隔符和空值之间'\0'?
在以下程序中,strtok()在主要部分中按预期工作,但我只是无法理解一个发现背后的原因.我已经读过strtok(): 要确定令牌的开始和末尾,该函数首先从启动位置扫描第一个字符中未包含的第一个字符(这成为令牌的开头).然后从令牌开始的扫描开始,以为定义者中包含的第一个字符变成令牌的末端. 来源: ,正如我们所知,strtok()将a \0放在每个令牌的末尾.但是在以下程序中,最后一个定界符是一个点(.),然后在该点和引号(")之间存在 toad .现在,点是我程序中的一个定界符,但是 toad 之后没有定界符,甚至没有一个空白(这是我程序中的定界符).请清除此前提引起的以下混乱: 为什么strtok()将 toad 视为一个令牌,即使它不在2个定界符之间?这是我读到strtok()遇到空字符(\0)时读的内容: 一旦在呼叫strtok的呼叫中找到了str的终止零字符,随着第一个参数返回null指针,所有随后呼叫该函数的所有调用. 来源: 没有任何地方说
0 2024-04-07
编程技术问答社区
在C语言中用多字符分隔符分割char字符串
我想基于多个字符定界符拆分char *string.我知道strtok()用于拆分字符串,但可与单个字符定界符一起使用. 我想根据"abc"或任何其他子字符串的子字符串分开char *字符串.如何实现? 解决方案 查找所需序列发生的点非常容易:strstr支持: char str[] = "this is abc a big abc input string abc to split up"; char *pos = strstr(str, "abc"); 因此,在此点,pos指向较大字符串中abc的第一个位置.这是事情变得有些丑陋的地方. strtok具有令人讨厌的设计,其中1)修改原始字符串,2)在内部将"当前"位置的指针存储在字符串中. 如果我们不介意大致相同,我们可以做这样的事情: char *multi_tok(char *input, char *delimiter) { static char *string; if (i
0 2024-04-06
编程技术问答社区
如何用转义的空白处分割句子?
我想使用whitespace将句子分为我的定界符,除了逃脱的空格.使用Boost :: Split和Regex,我该如何拆分?如果不可能,还有什么? 示例: std::string sentence = "My dog Fluffy\\ Cake likes to jump"; 结果: 我的 狗 蓬松\蛋糕 喜欢 到 跳跃 解决方案 三个实现: 助长精神 使用Boost Regex 手写解析器 带有增强精神 这是我如何用促进精神来做到这一点.这似乎过于谋杀,但是经验告诉我,一旦您分解输入文本,您可能需要更多的解析逻辑. 当您从"仅分开代币"到具有生产规则的真实语法时,促进精神会闪耀. #include namespace qi = boost::spirit::qi; int main() { std::string const sentence = "My
2 2024-04-02
编程技术问答社区
反斜线零分界符'\0'。
我已经看到'\0'将用作混合二进制文件(UTF8字符串 +二进制数据)中的定界符.谁能解释'\0'的含义或指向一个学习的好地方? 解决方案 它是空字符;此Wikipedia中的更多信息文章. 其他解决方案 两字符\0在C源代码中使用表示表示 ,这是具有ASCII值0的(单个)字符. NUL字符串中使用NUL字符串来指示字符串的末端在哪里.例如,字符串"Hello"被编码为十六进制字节: 48 65 6c 6c 6f 00 在这种情况下,C编译器会在任何双引号的字符串的末端自动添加00字节.如果您将常数写为"Hello\0",则C编译器将生成: 48 65 6c 6c 6f 00 00 其他解决方案 \0是\000的速记,这是一个八达字符逃脱.总的来说,您可以缩短任何八分之一的八分位数.这源自原始的C逃脱序列(\n \r \t \f \v \b \000,后者是八进制中的字符值; ANSI添加了一些,\v如今有些罕见,许多更现代的语言无法实施它)
4 2024-03-30
编程技术问答社区
为二进制序列定界
我需要能够界定二进制数据流.我正在考虑使用诸如ASCII EOT(传输末端)字符之类的东西来执行此操作. 但是我有点担心 - 我怎么能确定用于此的特定二进制序列(0b00000100)不会出现在我自己的二进制序列中,从而在划界上给出假阳性? 换句话说,二进制划界如何最好地处理? 编辑:...不使用长度标头.对不起,伙计们,应该以前提到过. 解决方案 您有五个选择: 使用不太可能发生的定界符字符.这有可能会错误地猜测.我不建议这种方法. 使用定界符字符和逃脱顺序包括定界符.您可能需要将逃生角色加倍,具体取决于使解析更容易的原因. (想想c \0在某些内容中包括一个aScii nul.) 使用可以确定的定界符短语不会发生. (想想 mime Message Message Borgaries . 预处理A 长度某种类型的字段,因此您知道将以下n字节读取为数据.这有一个缺点,要求您在编写数据之前知道这长度,这有时很难或不可能. 使用更复杂的东西,例如 as
2 2024-03-30
编程技术问答社区
在批处理中把文件移动到带有全名的修剪过的文件名位置
我正在尝试根据文件名将几个类似的文件移动到文件夹中. 下面的代码正常运行,但如果基本名称超过5个字符,则无法正常工作,然后说目录已经存在,并将文件移至较短的命名文件夹. . 这个想法是根据文本文件制作文件夹,并将其与以相同名称开头的图片一起移动(直至" _"到同一文件夹,而文件名仍然完好无损.图片名称更长尽管长度不同. eg: sb12.txt sb123.txt SB1234.TXT SB12345.TXT SB123_V_05062020.JPG SB123_VT_05062020.JPG SB12345_V_05062020.JPG SB12345_VT_05062020.JPG 我尝试在循环参数中添加delims=_,但不此操作: for /f "tokens=* delims=_ " %%f in ('dir /b /on "%dir%\*%ext%"') do ( 我已经通过将通配符更改为>.*的>.*已经"解决"了较长的名称问题
0 2024-03-29
编程技术问答社区
如何在特定单词之后切弦?
出现字符串, TARO/时,如何在.bat文件中剪切类似的字符串? Init., 12, TARO/ BLA BLA CDE Ademanto, TARO/ BLA BLA XYZ 我只想拥有Init., 12和Ademanto. 我不能使用for的定界符,因为它仅限于一个字符,对吧? 解决方案 这是一个更强大的解决方案,即使字符串包含引号或毒物字符,也应该可以工作 - 用新的行字符替换截止字符串.对于/f,将迭代每条结果线,因此请使用goto突破循环并仅保留第一行. @echo off setlocal disableDelayedExpansion set "string=;Init., 12, TARO/ BLA BLA CDE" setlocal enableDelayedExpansion set ^"string=!string:, TARO/=^ !^" for /f delims^=^ eol^= %%A in ("!string!") d
0 2024-03-29
编程技术问答社区
将每个分隔符-批次的值分割成单独的行
我正在尝试使用分界符=将CSV文件的值分为单独的行,以分开.即. #csv file video1,video2,video3 video4,video5,video6 #Preferred output: video1, video2, video3, ect.... 到目前为止,我有: @echo off setLocal EnableDelayedExpansion for /f "tokens=* delims=, " %%a in (input.csv) do ( set /a N+=1 echo ^%%a^,>>output.csv ) 但是,我遇到了参数%% A的问题,只是被添加为字符串.我将如何为每个引起分裂,然后将字符串放在newline上? 解决方案 @echo off setLocal for /f "delims=" %%a in (input.csv) do ( for %%i in (%%a) do echo %%i,>>o
2 2024-03-29
编程技术问答社区
如何在批处理文件中解析一个有特殊分隔符的文件?
我想用批处理解析一个看起来像这样的文件: a: string_containing_various_characters,.:and spaces/1 b: string_containing_various_characters,.:and spaces/2 c: string_containing_various_characters,.:and spaces/3 d: string_containing_various_characters,.:and spaces/4 e: string_containing_various_characters,.:and spaces/5 f: string_containing_various_characters,.:and spaces/6 g: string_containing_various_characters,.:and spaces/7 我需要提取以下" A:"," B:"的每个字符串," C:"唯一始终是正确的是
0 2024-03-29
编程技术问答社区
新行作为FOR循环的分隔线
我是批处理脚本的新手,我正在尝试解析一个具有新行界定的键值(类)对的文件.例如: the value of abc 1234 the value of def 5678 the value of ghi 9876 我想使用新的行读取此文件,以便我可以访问值. 之类的东西 for /f "tokens=1,2,3 delims='\n'" %%i in ('findstr /C:the value of abc 'filepath') do echo %%j 解决方案 我只是将其作为选择: for /F delims^=^ eol^= %%i in ('findstr /C:the value of abc 'filepath') do echo %%i 其他解决方案 您无法将"新行"设置为定界符.尝试以下操作: @echo off &setlocal for /f "tokens=1*delims=:" %%i in ('findstr /NC:
2 2024-03-29
编程技术问答社区