[.NET]讀TXT檔改變內容方向,從最後列、最後行,以列方式讀取
今天看到朋友問「讀TXT檔改變內容方向」,還蠻好玩的,所以記錄一下。
題目如下,
假設檔案內容是
AAAA
BBBB
CCCC
要讓這個內容變成
CBA
CBA
CBA
CBA
直覺想法是先把全部的資料讀出後,再看各資料那一行的長度最長,然後由那個最大的長度,由後往前取字串來組。
因為有可能長度不一,所以取的過程有可能會有錯誤,那就把Exception給吃掉。程式如下,
string[] lines = System.IO.File.ReadAllLines(@"f:\t.txt");
int linesCount = lines.Count();
StringBuilder result = new StringBuilder();
//取出最長的一筆資料
//使用LINQ
//var maxLen = (from line in lines
// select line.Length).Max();
//使用迴圈來取
int maxLen = 0;
for (int j = 0; j < linesCount; j++)
{
if (maxLen < lines[j].Length)
maxLen = lines[j].Length;
}
for (int i = 1; i <= maxLen; i++)
{
string revertLine = string.Empty;
for (int j = 1; j <= linesCount; j++)
{
try{
revertLine += lines[linesCount - j][maxLen - i];
}catch(Exception ){
}
}
result.Append(revertLine + "\r\n");
}
MessageBox.Show(result.ToString());
或是將各字串都補成一樣長,使用PadLeft or PadRight,這樣就不用把錯誤給吃掉了。如下,
使用string.PadLeft
string[] lines = System.IO.File.ReadAllLines(@"f:\t.txt");
int linesCount = lines.Count();
StringBuilder result = new StringBuilder();
//取出最長的一筆資料
//使用LINQ
//var maxLen = (from line in lines
// select line.Length).Max();
//使用迴圈來取
int maxLen = 0;
for (int j = 0; j < linesCount; j++)
{
if (maxLen < lines[j].Length)
maxLen = lines[j].Length;
}
//將所有列的資料都補成一樣長
for (int j = 0; j < linesCount; j++)
{
if (maxLen > lines[j].Length)
lines[j] = lines[j].PadLeft(maxLen);
}
for (int i = 1; i <= maxLen; i++)
{
string revertLine = string.Empty;
for (int j = 1; j <= linesCount; j++)
{
revertLine += lines[linesCount - j][maxLen - i];
}
result.Append(revertLine + "\r\n");
}
MessageBox.Show(result.ToString());
使用string.PadRight
string[] lines = System.IO.File.ReadAllLines(@"f:\t.txt");
int linesCount = lines.Count();
StringBuilder result = new StringBuilder();
//取出最長的一筆資料
//使用LINQ
var maxLen = (from line in lines
select line.Length).Max();
//使用迴圈來取
//int maxLen = 0;
//for (int j = 0; j < linesCount; j++)
//{
// if (maxLen < lines[j].Length)
// maxLen = lines[j].Length;
//}
//將所有列的資料都補成一樣長
for (int j = 0; j < linesCount; j++)
{
if (maxLen > lines[j].Length)
lines[j] = lines[j].PadRight(maxLen);
}
for (int i = 1; i <= maxLen; i++)
{
string revertLine = string.Empty;
for (int j = 1; j <= linesCount; j++)
{
revertLine += lines[linesCount - j][maxLen - i];
}
result.Append(revertLine + "\r\n");
}
MessageBox.Show(result.ToString());
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^