できること(入力例と出力例)
- 箇条書きのテキストを表形式に変換する
- 今回の例だと、1列の箇条書きを4列の表に変換
入力例
テキスト1行目
テキスト2行目
テキスト3行目
テキスト4行目
テキスト5行目
テキスト6行目
テキスト7行目
テキスト8行目
テキスト9行目
テキスト10行目
テキスト11行目
テキスト12行目
出力例
テキスト1行目|テキスト2行目|テキスト3行目|テキスト4行目
テキスト5行目|テキスト6行目|テキスト7行目|テキスト8行目
テキスト9行目|テキスト10行目|テキスト11行目|テキスト12行目
やり方(Pythonコード)
1列の箇条書きを4列の表に変換
# テキストを1行ずつ読み込む
with open('input.txt', 'r') as f:
lines = f.readlines()
# バッファにためる行数を設定する
n = 4
# バッファの初期化
buffer = []
# テキストを4行ごとに区切ってパイプ記号で区切られた1行のテキストに変換する
for i, line in enumerate(lines):
# バッファにテキストをためる
buffer.append(line.strip())
# バッファにためたテキストがn行になった場合には、パイプ記号で区切って1行のテキストに変換して出力する
if len(buffer) == n:
print('|'.join(buffer))
# バッファを空にする
buffer = []
# テキストの行数が4で割り切れない場合には、最後にためたバッファをパイプ記号で区切って1行のテキストに変換して出力する
if len(buffer) > 0:
print('|'.join(buffer))
(参考)ここに至るまで(ChatGPTとの会話内容)
今回、ChatGPTくんが書いたコードがそのまま使えました。会話内容を紹介します。
まず最初に入力例と出力例を示し、どんな処理を行われているか言語化してもらいました。
ChatGPTへの質問
以下の入力例と出力例を参考に、行われている処理を解説してください。
#入力例
テキスト1行目
テキスト2行目
テキスト3行目
テキスト4行目
テキスト5行目
テキスト6行目
テキスト7行目
テキスト8行目
テキスト9行目
テキスト10行目
テキスト11行目
テキスト12行目
#出力例
テキスト1行目|テキスト2行目|テキスト3行目|テキスト4行目
テキスト5行目|テキスト6行目|テキスト7行目|テキスト8行目
テキスト9行目|テキスト10行目|テキスト11行目|テキスト12行目
#処理
ChatGPTからの回答
この処理は、複数行のテキストを与えられた場合に、4行ごとに区切ってパイプ記号(|)で区切られた1行のテキストを出力する処理です。
具体的には、与えられたテキストを1行ずつ読み込みながら、1行目から4行目までのテキストをバッファにためていきます。5行目以降のテキストが与えられた場合には、これまでためた4行のテキストをパイプ記号で区切って1行のテキストに変換し、出力します。そして、バッファを空にして、次の4行のテキストをためる準備をします。最後に、与えられたテキストが4行未満の場合には、最後にためたバッファをパイプ記号で区切って1行のテキストに変換し、出力します。
この処理を実装するためには、ループ文や条件文を使って、適切にテキストを読み込み、バッファにため、パイプ記号で区切った1行のテキストを出力する必要があります。また、テキストを1行ずつ読み込む方法や、文字列を区切る方法、条件文やループ文の使い方など、プログラミングの基礎知識が必要となります。
そのあとで、pythonコードで出力してもらいました。
ChatGPTへの質問
この処理を行うpythonのコードを出力してください
ChatGPTからの回答
以下は、与えられたテキストを4行ごとに区切ってパイプ記号で区切られた1行のテキストに変換するPythonコードの例です。
# テキストを1行ずつ読み込む
with open('input.txt', 'r') as f:
lines = f.readlines()
# バッファにためる行数を設定する
n = 4
# バッファの初期化
buffer = []
# テキストを4行ごとに区切ってパイプ記号で区切られた1行のテキストに変換する
for i, line in enumerate(lines):
# バッファにテキストをためる
buffer.append(line.strip())
# バッファにためたテキストがn行になった場合には、パイプ記号で区切って1行のテキストに変換して出力する
if len(buffer) == n:
print('|'.join(buffer))
# バッファを空にする
buffer = []
# テキストの行数が4で割り切れない場合には、最後にためたバッファをパイプ記号で区切って1行のテキストに変換して出力する
if len(buffer) > 0:
print('|'.join(buffer))
このコードでは、まずopen()関数を使って、ファイルからテキストを読み込んでいます。次に、バッファにためる行数をnで設定し、バッファを初期化します。その後、enumerate()関数を使って、テキストを1行ずつ読み込みながら、バッファにテキストをためていきます。バッファにためたテキストがn行になった場合には、join()メソッドを使ってパイプ記号で区切って1行のテキストに変換し、print()関数で出力します。最後に、テキストの行数が4で割り切れない場合には、最後にためたバッファをパイプ記号で区切って1行のテキストに変換して出力します。
(参考)Python使ったことないよ!っていうあなた
Google Colaboratory使えば簡単なのでスーパーオススメです。
おわりに
今回、ググって良いやり方が出なかったので、ChatGPTに聞いてみたのですが、そもそもPython使わずExcelでも出来そうな気もする…
良いやり方をご存知の方、教えてください!
ちなみにChatGPTにExcelのやり方を教えてもらったんですが、なんかうまくいきませんでした。