问题
I want my program to read a text file all characters 1 by 1 and whereever it finds inverted comma ( " ), it adds a semicolon before that inverted comma. For eg we have a paragraph in a text file as follow:
This is a paragraph which conains lots and lots of characters and some names and dates. My name "Sam" i was born at "12:00" "noon". I live in "anyplace" .
Now i want the output to be as follows :
This is a paragraph which conains lots and lots of characters and some names and dates. My name ;"Sam;" i was born at ;"12:00;" ;"noon;". I live in ;"anyplace;" .
It should open the file using file stream then reads character and then adds semicolon where it finds inverted comman. And the output should be equals to textbox1.text.
CODE TILL I MADE: -
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace ConsoleApplication1 {
class Program
{
static void Main(string[] args)
{
char ch;
int Tchar = 0;
StreamReader reader;
reader = new StreamReader(@"C:\Users\user1\Documents\data.txt");
do
{
ch = (char)reader.Read();
Console.Write(ch);
if (Convert.ToInt32(ch) == 34)
{
Console.Write(@";");
}
Tchar++;
} while (!reader.EndOfStream);
reader.Close();
reader.Dispose();
Console.WriteLine(" ");
Console.WriteLine(Tchar.ToString() + " characters");
Console.ReadLine();
}
}
}
OUTPUT:-
This is a paragraph which conains lots and lots of characters and some names and dates. My name ";Sam"; i was born at ";12:00"; ";noon";. I live in ";anyplace"; . 154 characters
I want that semicolon before the inverted comma. any help would be appreciated. Thanks
回答1:
Swap the order of the operations:
if (Convert.ToInt32(ch) == 34)
{
Console.Write(@";");
}
Console.Write(ch);
e.g. don't write the original character until AFTER you've decided to output a semicolon or not.
回答2:
Try ch = (char)reader.Peek();
This will read tell you the next character without reading it. You can then use this to check if it is a " or not an insert : accordingly
if (Convert.ToInt32((char)read.Peek()) == 34) Console.Write(@";")
回答3:
Do you have to read in character by character? The following code will do the whole thing as a block and return you a list containing all your lines.
var contents = File.ReadAllLines (@"C:\Users\user1\Documents\data.txt")
.Select (l => l.Replace ("\"", ";\""));
来源:https://stackoverflow.com/questions/16618341/how-to-read-character-in-a-file-1-by-1-c-sharp