当前位置: 首页 > 知识库问答 >
问题:

如何创建没有空格或空行的文本文件?只有一个文本块

水铭晨
2023-03-14

以下是我在form1构造函数中使用文本文件的方式:

创建空文本文件:

ww = new StreamWriter(@"c:\temp\test.txt");
client.Encoding = System.Text.Encoding.GetEncoding(1255);
page = client.DownloadString("http://rotter.net/scoopscache.html");
TextExtractor.ExtractDateTime(page, newText, dateTime);
StreamWriter w = new StreamWriter(@"d:\rotterhtml\rotterscoops.html");
w.Write(page);
w.Close();
TextExtractor.ExtractText(@"d:\rotterhtml\rotterscoops.html", newText, dateTime);
combindedString = string.Join(Environment.NewLine, newText);
ww.Write(combindedString);
ww.Close();
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;

namespace ScrollLabelTest
{
    class TextExtractor
    {
        public static void ExtractText(string filePath, List<string> newText, List<string> dateTime)
        {
            //newText = new List<string>();
            List<string> text = new List<string>();
            var htmlDoc = new HtmlAgilityPack.HtmlDocument();
            htmlDoc.OptionFixNestedTags = true;
            htmlDoc.Load(filePath, System.Text.Encoding.GetEncoding(65001));

            if (htmlDoc.DocumentNode != null)
            {
                var nodes = htmlDoc.DocumentNode.SelectNodes("//a/b");
                foreach (var node in nodes)
                {
                    text.Add(node.InnerText);
                }
            }
            List<string> t = filterNumbers(text);
            for (int i = 0; i < t.Count; i++)
            {
                newText.Add(t[i]);
                newText.Add(dateTime[i]);
                newText.Add("");
            }
        }

        public static void ExtractDateTime(string text, List<string> newText, List<string> dateTime)
        {

            //dateTime = new List<string>();
            string pattern1 = "<span style=color:#000099;>(?'hebrew'[^<]*)</span>";
            Regex expr1 = new Regex(pattern1, RegexOptions.Singleline);
            MatchCollection matches = expr1.Matches(text);
            foreach (Match match in matches)
            {
                string hebrew = match.Groups["hebrew"].Value;

                string pattern2 = @"[^\s$]*:[^:]*:\s+\d\d:\d\d";
                Regex expr2 = new Regex(pattern2);
                Match match2 = expr2.Match(hebrew);
                string results = match2.Value;
                int i = results.IndexOf("שעה");
                results = results.Insert(i + "שעה".Length, " ");
                dateTime.Add("דווח במקור " + results);
            }
        }

        private static List<string> filterNumbers(List<string> mix)
        {
            List<string> onlyStrings = new List<string>();
            foreach (var itemToCheck in mix)
            {
                int number = 0;
                if (!int.TryParse(itemToCheck, out number))
                {
                    onlyStrings.Add(itemToCheck);
                }
            }
            return onlyStrings;
        }
    }
}

这是文本文件test.txt在所有提取之后的最终结果:

文本文件

你可以看到第一行是空行,然后最大的文本行不是从左边开始的,而是从左边开始的,但是有一个空格。然后在每两行之间有一个空格/空行。

共有1个答案

阚原
2023-03-14

这将为您修复它:

using (StreamWriter sw = new StreamWriter(@"C:\temp\test1.txt", false))
{
     using (StreamReader sr = new StreamReader(@"C:\temp\test.txt"))
     {
          while (sr.Peek() >= 0)
          {
                 var strReadLine = sr.ReadLine().Trim().Replace("\t", "").Replace("\r\n", "");
                 if (!String.IsNullOrWhiteSpace(strReadLine)) 
                 {
                        sw.WriteLine(strReadLine);               
                 }
          }
     }    
}
 类似资料:
  • 问题内容: 我一直在阅读和谷歌搜索,但似乎找不到这个简单的答案。 我有一个读取文件的功能,但是如果文件不存在,则会出现混乱。我想做的是一个函数,该函数在读取之前会检查文件是否存在,如果不存在,则会创建一个空文件。这就是我所拥有的。 问题答案: 不要尝试先检查是否存在,因为如果同时创建了文件,那么您将面临一场竞赛。您可以打开带有标志的文件以创建该文件(如果不存在):

  • 我使用new File()在内存中创建一个文件,然后我想在上面写,但不想在磁盘中创建文件。 我希望它不要在磁盘上创建文件。

  • 但随后文件每次都被触摸,在日志中显示为黄线,这也是不令人满意的... 这个简单的问题还有更好的解决办法吗?

  • 问题内容: 如果我在不带字符“ |”的脚本下运行 它正常工作,但是当我添加字符“ |”时 如何添加字符“ |”不起作用 使用sql脚本将文本文件? 谢谢 问题答案: 管道字符在批处理命令中具有特殊含义,因此必须使用脱字符将其转义。这应该工作: 尽管这实际上不是将数据写入文本文件的好方法:通常,SQL Server不应具有写入C:驱动器根目录的权限,并且默认情况下处于禁用状态。我建议你看看喜欢的替代

  • 问题内容: $(“#topNav” + $(“#breadCrumb2nd”).text().replace(” “, “”)).addClass(“current”); 这是我的代码的一部分。我想在获取另一个ID的text属性后向ID添加一个类。问题在于,持有我需要的文本的ID包含字母之间的空格。 我希望删除空白。我已经尝试过,但这只能部分起作用。该只删除第一个空间。 问题答案: 您必须告诉re

  • 我在JLabel中有一些长文本,例如“Lorem ipsum dolor sit amet, consecetur adipiscing elit, se do eiusmod temor interdidunt ut labore et dolore magna aliqua”。如果用户调整窗口大小并且没有太多空间,我想隐藏一些文本。我想得到这样的东西“Lorem ipsum dolor sit